Любой способ от SingleUploader до DynamicForm

Есть ли способ добавить SingleUploader в объект DynamicForm? Я добавил несколько виджетов (Radiobutton, TextBox и т. д.), используя dynamicFormObj.setField(). Я хочу добавить объект SingleUploader в dynamicFormObj вместе с виджетами, которые я добавил с помощью setField. Пожалуйста, дайте мне знать, если есть какое-либо решение. Примечание. SingleUploader позволяет нам асинхронно загружать файл на сервер. Вот почему я не могу использовать UploadItem. Если есть какое-либо альтернативное решение для загрузки файла с использованием DynamicForm, также рекомендуется.


person Krishna    schedule 30.05.2013    source источник


Ответы (2)


Я предлагаю вам взглянуть на FileItem . Кроме того, вместо того, чтобы пытаться добавить его в форму после построения, просто добавьте его в начале, а затем покажите/скройте, когда вы хотите отобразить его или нет. Другое предложение для отображения/скрытия — использование showIfFunction.

person Sednus    schedule 30.05.2013
comment
Я не могу асинхронно загрузить файл на сервер с помощью FileItem (поправьте меня, если я ошибаюсь). Вот почему я использовал SingleUploader, который дает мне возможность асинхронно загружать файл на сервер. - person Krishna; 31.05.2013

У меня есть решение путем привязки логики загрузки к IButton с помощью скрытого виджета Gwt.

import com.google.gwt.dom.client.Element;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.user.client.ui.FileUpload;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler;
import com.smartgwt.client.util.ValueCallback;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;

/**
 * The FileUploadButton widget class is a class that implements the same APIs as the
 * {@link com.smartgwt.client.widgets.IButton} class. Once the button is clicked, a "Open" dialog will be shown. After a
 * file is selected, the file content will be uploaded to the destination. The response will be shown, if a callback
 * function is assigned.
 * 
 * Depending on the current skin, <code>IButton</code>s may be on the
 * {@link com.smartgwt.client.widgets.StretchImgButton} component, which renders via images, or may be based on the
 * {@link com.smartgwt.client.widgets.Button} component, which renders via CSS styles.
 */
public class FileUploadButton extends IButton {

    private String filename;
    private ValueCallback callback;

    public FileUploadButton(String action, String fieldName, String title) {
        setTitle(title);
        createAndInitUploadForm(action, fieldName);
    }

    /**
     * Set the accept types (e.g. text/plain) of files, which will affect the file extension filter of "Open" dialog.
     */
    public void setAccpetTypes(String types) {
        fileUpload.getElement().setAttribute("accept", types);
    }

    /**
     * Set the callback when the submission is completed.
     */
    public void setCallback(ValueCallback callback) {
        this.callback = callback;
    }

    /**
     * Return the filename that has been chosen or an empty string.
     */
    public String getFileName() {
        return filename;
    }

    private FormPanel form; // GWT widget
    private FileUpload fileUpload; // GWT widget

    private static native void clickOnInputFile(Element elem) /*-{
        elem.click();
    }-*/;

    private void createAndInitUploadForm(String action, String fieldName) {
        form = new FormPanel();
        form.setAction(action);
        form.setMethod(FormPanel.METHOD_POST);
        form.setEncoding(FormPanel.ENCODING_MULTIPART);
        form.addSubmitCompleteHandler(new SubmitCompleteHandler() {
            public void onSubmitComplete(SubmitCompleteEvent event) {
                setDisabled(false);
                if (callback != null) {
                    callback.execute(event.getResults());
                }
            }
        });

        fileUpload = new FileUpload();
        fileUpload.setName(fieldName);
        fileUpload.addChangeHandler(new ChangeHandler() {
            public void onChange(ChangeEvent event) {
                filename = fileUpload.getFilename();
                if (!filename.isEmpty()) {
                    setDisabled(true);
                    form.submit();
                }
            }
        });
        form.setWidget(fileUpload);

        // Trick to draw an invisible form on the button canvas. Note that the width and the height cannot be a
        // negative or zero, because it will cause the form not to be created onto the canvas!
        form.setVisible(false);
        form.setWidth("1px");
        form.setHeight("1px");

        addChild(form);

        addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                clickOnInputFile(fileUpload.getElement());
            }
        });
    }

}

Вы можете изменить IButton на любые другие виджеты SmartGwt по своему усмотрению. Это работает для меня и хороших выходных.

person stanleyxu2005    schedule 01.06.2013