无法一起发送ListBox和文件

时间:2012-06-11 10:24:20

标签: java gwt servlets gwt2 formpanel

您好我正在使用GWT使用servlet发送文件。

最初我试图只将文件发送到服务器。这很好。

现在在af ormPanel我添加了3个Listbox。

private ListBox propertyNamelist = getListBox("propertyName");
    private ListBox propertyTypeList = getListBox("propertyType");
    private ListBox propertyValueList = getListBox("propertyValue");

private ListBox getListBox(String name){

            listbox = new ListBox();
            listbox.setName(name);

        return listbox;
    }

然后将其添加到FormPanel。

formPanel.setWidget(propertyNamelist);
formPanel.setWidget(propertyTypeList);
formPanel.setWidget(propertyValueList);
formPanel.submit();

在服务器端。

try {

        ServletFileUpload upload = new ServletFileUpload();

        FileItemIterator iterator = upload.getItemIterator(request);
        while (iterator.hasNext()) {
            FileItemStream item = iterator.next();
             stream = item.openStream();

            if (item.isFormField()) {
                log.warning("Got a form field: " + item.getFieldName());
                System.out.println(" chk fg " +item.getFieldName() +"  =  "+ Streams.asString(item.openStream()));


            } else {

                log.warning("Got an uploaded file: " + item.getFieldName()
                        + ", name = " + item.getName());
                fileName = item.getName();
                mimetype = item.getContentType();

            }
        }

    }catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

输出:

WARNING: Got a form field: propertyValue
Jun 11, 2012 11:37:55 AM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: /UploadFileServlet: org.apache.commons.fileupload.FileItemStream$ItemSkippedException
 chk fg propertyValue  =  motivation

根据我的动机是列表框PropertyValue的第一个值,其中列表框中有更多值。

还有更多应该显示的列表框。

我无法理解这是否正在发生。

注意:我无法通过RPC发送Listbox,因为这些列表框与要发送到服务器和服务器到外部存储库的文件有关。

有人提供帮助。

1 个答案:

答案 0 :(得分:2)

正如其名称暗示setWidget上的FormPanel替换了FormPanel小部件的内容。

您想在FormPanel中放置几个​​小部件,因此请使用中间容器(例如FlowPanel)将您的小部件放入:

// put all widgets together in some container (you can have a more complex layout)
FlowPanel container = new FlowPanel();
container.add(fileUpload);
container.add(propertyNameList);
container.add(propertyTypeList);
container.add(propertyValueList);

// set the container as the content of the form, so named form widgets will get
// their value sent to the server.
formPanel.setWidget(container);