получать данные из Formpanel в gwt

Я пытаюсь использовать FormPanel. на панели форм

  formPanel.setWidget(flexTable);

Добавлен флажок, listBox и FileUpload

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

Код сервлета написан для получения всех значений, которые работают нормально только для 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.


person GameBuilder    schedule 09.03.2012    source источник


Ответы (3)


См. ответ на этот вопрос: Передача параметров вместе с формой загрузки multipart/form-data (Java Http Post Upload) о том, как получить значения на стороне сервера.

Чтобы отправить значения на сервер, вам нужно установить имя для каждого виджета с помощью метода setName() в виджетах ListBox и CheckBox. Имя — это то, что возвращает item.getFieldName().

person Hilbrand Bouwkamp    schedule 09.03.2012
comment
@HibrandBouwkamp У меня есть ярлык на панели форм. нет способа lablel.setName(). что делать. - person NewCodeLearner; 09.03.2012
comment
@NewCodeLearner Каждое поле, публикуемое в форме, должно иметь HTML-тег input. Метка — div, так что это не сработает. Поскольку метка является статической, она не реагирует на ввод данных пользователем, поэтому вы можете использовать скрытое поле ввода и хранить значение метки в этом поле. В GWT для этого можно использовать виджет Hidden. Он не отображается в пользовательском интерфейсе, но вы должны установить для него значения, когда вы устанавливаете значение для метки, и это значение будет отправлено под именем, которое вы установили для скрытого виджета. - person Hilbrand Bouwkamp; 09.03.2012

Здесь несколько вещей:

  1. Почему бы вам не использовать GWT-RPC для связи с сервером? Это предпочтительный способ передачи данных.
  2. Если вы все же хотите использовать сервлет для обработки запроса, как вы отправляете свои значения? Ваши виджеты встроены в форму или вы вручную кодируете их значения в GET-url? Если вы используете форму, вы должны добавить имена в свой элемент виджета (checkbox.getElement().setAttribute("name", "mycheck");), и в вашем сервлете вы получите значение на request.getParameter("mycheck").
  3. Я никогда не использовал ServletFileUpload, но я считаю, что он предоставит вам только разные части файла вашего запроса.
person Guillaume Polet    schedule 09.03.2012
comment
За исключением того, что единственный способ загрузить файл - использовать форму... Это невозможно сделать через GWT-RPC. И вместо использования способа setAttribute просто используйте метод setName для виджета. - person Hilbrand Bouwkamp; 09.03.2012
comment
Для загрузки файла, согласен. Но для передачи данных лучше всего подходит GWT-RPC. Если ему нужно иметь один пост, то он должен включить свои виджеты в форму вокруг загрузки файла и установить имя для них всех. - person Guillaume Polet; 09.03.2012
comment
Да тоже согласен. Если вы не делаете FileUpload, не используйте сообщение формы. - person Hilbrand Bouwkamp; 09.03.2012
comment
Все значения другого виджета связаны с документом, поэтому я поместил их в formPanel. Спасибо, я получил ответ. if (item.isFormField()) { String name = item.getFieldName(); String value = Streams.asString(item.openStream()); } else - person NewCodeLearner; 09.03.2012

В Что делать с вашим кодом.

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

и не забудьте setName каждого виджета на Formpanel

person NewCodeLearner    schedule 09.03.2012