【问题标题】:receive data from Formpanel in gwt在 gwt 中从 Formpanel 接收数据
【发布时间】:2012-03-09 12:22:42
【问题描述】:

我正在尝试使用 FormPanel。在表单面板上

  formPanel.setWidget(flexTable);

添加了一个复选框、一个列表框和文件上传

flexTable.setWidget(4, 1,listBox);
flexTable.setWidget(5, 1, fileUpload);
flexTable.setWidget(6, 1, checkBox);
 // More Code

编写了一个 Servlet 代码来获取所有仅在 fileUpload 中运行良好的值。 如何获取checkBox和ListBox的值。

protected void doPost(HttpServletRequest request, 
        HttpServletResponse response) 
                        throws ServletException, IOException { 

    byte[] buffer = new byte[1310720];// 10 MB

     try {

        ServletFileUpload upload = new ServletFileUpload();

        FileItemIterator iterator = upload.getItemIterator(request);

         while (iterator.hasNext()) {
             FileItemStream item = iterator.next();
             InputStream stream = item.openStream();

             if (item.isFormField()) {
                  // WHAT TO DO??

                } else {

                  int len;

                  while ((len = stream.read(buffer, 0, buffer.length)) != -1) {
                    response.getOutputStream().write(buffer, 0, len);                       
                  }
                }
         }

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

}

请帮忙获取checkBox和List Box的值。

【问题讨论】:

    标签: java gwt servlets gwt2 formpanel


    【解决方案1】:

    请参阅此问题的答案:Passing parameters along with a multipart/form-data upload form (Java Http Post Upload),了解如何在服务器端获取值。

    要将值发送到服务器,您需要通过 ListBox 和 CheckBox 小部件上的setName() 方法为每个小部件设置一个名称。名称是 item.getFieldName() 返回的名称。

    【讨论】:

    • @HibrandBouwkamp 我在 Formpanel 上有标签。没有办法lablel.setName().怎么办。
    • @NewCodeLearner 在表单中发布的每个字段都必须是 HTML 标记 input。标签是div,所以它不起作用。由于标签是静态的,它不会对用户输入做出反应,因此您可以使用隐藏的输入字段并将标签值存储在该字段中。在 GWT 中,您可以使用 Hidden 小部件。它不会显示在 UI 中,但您应该为它设置值,当您在 Label 上设置值时,该值将以您设置为隐藏小部件的名称提交。
    【解决方案2】:

    这里有几件事:

    1. 为什么不使用 GWT-RPC 与服务器通信?这是传输数据的首选方式。
    2. 如果您仍想使用 servlet 来处理请求,您如何提交您的值?您的小部件是嵌入在表单中还是在 GET-url 中手动编码它们的值?如果使用表单,则应在小部件元素 (checkbox.getElement().setAttribute("name", "mycheck");) 上添加名称,并在 servlet 中通过 request.getParameter("mycheck") 获取值。
    3. 我从未使用过 ServletFileUpload,但我相信它只会为您提供请求的不同文件部分。

    【讨论】:

    • 除了上传文件的唯一方法是使用表单...不能通过 GWT-RPC 完成。而不是使用setAttribute 方式,只需在小部件上使用setName 方法。
    • 对于文件上传,同意。但是要传输数据,GWT-RPC 是要走的路。如果他需要一个帖子,那么他应该在文件上传的表单中包含他的小部件,并为所有小部件设置一个名称。
    • 是的,也同意了。如果您不执行 FileUpload,请不要使用表单发布。
    • 其他小部件的所有值都与 document.so 我把它们放在 formPanel 上。谢谢我得到了我的答案。 if (item.isFormField()) { String name = item.getFieldName(); String value = Streams.asString(item.openStream()); } else
    【解决方案3】:

    在你的代码做什么。

      String name  = item.getFieldName();
                      String value = Streams.asString(item.openStream());
    

    别忘了setNameFormpanel上的每个小部件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 2023-03-29
      相关资源
      最近更新 更多