Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    DynamicForm with an UploadItem doesn't generate a Multipart request

    Generated a basic sample to test the UploadItem component but I don't receive a multipart request with the selected file to be uploaded.

    I don't know what I'm doing wrong in this case. Can you help me? Thank you.

    Using: SmartClient Version: v10.0p_2015-10-06/LGPL Development Only (built 2015-10-06)
    Browser: Version 45.0.2454.101 m
    Steps to reproduce:
    Select a file and click "Save form"
    Check wich messages was thrown by the servlet handling the file upload

    SmartGWT client code:
    Code:
    import com.google.gwt.core.client.EntryPoint;
    import com.smartgwt.client.data.DataSource;
    import com.smartgwt.client.data.OperationBinding;
    import com.smartgwt.client.data.fields.DataSourceBinaryField;
    import com.smartgwt.client.data.fields.DataSourceSequenceField;
    import com.smartgwt.client.types.DSDataFormat;
    import com.smartgwt.client.types.DSOperationType;
    import com.smartgwt.client.types.DSProtocol;
    import com.smartgwt.client.types.Encoding;
    import com.smartgwt.client.widgets.form.DynamicForm;
    import com.smartgwt.client.widgets.form.fields.CancelItem;
    import com.smartgwt.client.widgets.form.fields.SubmitItem;
    import com.smartgwt.client.widgets.form.fields.UploadItem;
    import com.smartgwt.client.widgets.layout.VLayout;
    
    public class FileItemTestCase implements EntryPoint {
        @Override
        public void onModuleLoad() {
            UploadItem multiFilePicker = new UploadItem("Attachment");
            SubmitItem submit = new SubmitItem("submit", "Save Form");
            CancelItem cancel = new CancelItem("cancel", "Clear Form");
    
            MessageDataSource dataSource = new MessageDataSource();
    
            DynamicForm dynamicForm = new DynamicForm();
            dynamicForm.setEncoding(Encoding.MULTIPART);
            dynamicForm.setDataSource(dataSource);
            dynamicForm.setFields(multiFilePicker, submit, cancel);
    
            VLayout topLayout = new VLayout();
            topLayout.addMember(dynamicForm);
    
            topLayout.draw();
        }
    
    }
    
    class MessageDataSource extends DataSource {
        public MessageDataSource() {
            super();
            setID("messageDataSource");
    
            setDataURL("fileUploadServlet");
    
            DataSourceSequenceField id = new DataSourceSequenceField("Id");
            id.setPrimaryKey(true);
            id.setHidden(true);
    
            DataSourceBinaryField attachment = new DataSourceBinaryField("Attachment");
    
            OperationBinding fetch = new OperationBinding();
            fetch.setOperationType(DSOperationType.FETCH);
            fetch.setDataProtocol(DSProtocol.GETPARAMS);
            OperationBinding add = new OperationBinding();
            add.setOperationType(DSOperationType.ADD);
            add.setDataProtocol(DSProtocol.POSTMESSAGE);
            OperationBinding update = new OperationBinding();
            update.setOperationType(DSOperationType.UPDATE);
            update.setDataProtocol(DSProtocol.POSTMESSAGE);
            OperationBinding remove = new OperationBinding();
            remove.setOperationType(DSOperationType.REMOVE);
            remove.setDataProtocol(DSProtocol.POSTMESSAGE);
            setOperationBindings(fetch, add, update, remove);
    
            setDataFormat(DSDataFormat.JSON);
            setFields(id, attachment);
        }
    }
    Servlet code:
    Code:
    package com.testcases.fileUploadServlet;
    
    import java.io.IOException;
    
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    
    public class FileUploadServlet extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse res) {
            String bodyContent = "<html><body>";
            if (ServletFileUpload.isMultipartContent(req)) {
                bodyContent += "Multipart request";
    
            } else {
                bodyContent += "Not multipart request";
            }
    
            bodyContent += "</body><html>";
            ServletOutputStream os;
            try {
                os = res.getOutputStream();
                os.write(bodyContent.getBytes());
    
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    #2
    The solution to this problems is:

    Instanciate a ValuesManager and bind it to the DynamicForm.

    Comment

    Working...
    X