Получить значение переключателя GWT в сервлете

У меня болит голова, пытаясь понять, как получить значения радиокнопок gwt на стороне сервера.

Вот моя форма UiBinder:

<g:FormPanel ui:field="form"><g:VerticalPanel ui:field="fruitPanel">
    <g:RadioButton name="fruit">apple</g:RadioButton>
    <g:RadioButton name="fruit">banana</g:RadioButton>
    <g:SubmitButton>Submit</g:SubmitButton> ...

Вот как я инициализирую форму:

form.setAction("/submit");
form.setMethod(FormPanel.METHOD_POST);

Итак, я подумал, что мне придется сделать это на сервлете:

fruit = req.getParameter("fruit")

Но, конечно, это не работает, параметр fruit не существует :/

Редактировать: хорошо, я получаю параметр фруктов, но он всегда «включен»

Я также попытался добавить переключатель в java с помощью:

RadioButton rb0 = new RadioButton("fruit", "apple");
RadioButton rb1 = new RadioButton("fruit", "banana");
fruitPanel.add(rb0);
fruitPanel.add(rb1);

Изменить: это проблема GWT: проблема 4795


person Florian d'Erfurth    schedule 27.03.2010    source источник
comment
Вы проверили с помощью Firebug (или аналогичного инструмента), что именно FormPanel отправляет на сервер? Это должно сузить возможные причины.   -  person Igor Klimer    schedule 27.03.2010
comment
Хорошая идея, я присмотрюсь к ней :)   -  person Florian d'Erfurth    schedule 28.03.2010


Ответы (2)


так как я не могу комментировать вопрос: какую версию GWT вы используете?

Я создал точно такой же шаблон, как и вы, и Firebug сообщает мне, что он публикует:

"фрукты = включено"

Конечно, эта полезная нагрузка публикуется только тогда, когда установлен один из флажков. ;-)

Но будьте осторожны: недавно я узнал, что GWT не устанавливает «значение» переключателя при использовании внутри шаблона UiBinder, а вместо этого просто отправляет «включено» в качестве значения, что делает переключатель более или менее бесполезным для использования в шаблоне UiBinder. Шаблон UiBinder.

HTH Макс.

person Makkes    schedule 27.03.2010
comment
Да, я пропустил панель в FormPanel в своем вопросе, извините. Я использую post, и моя кнопка отправки находится в VerticalPanel. Сервлет нормально читает текстовые поля, но я не могу получить переключатели. Также вы предлагаете мне использовать java для создания переключателей, чтобы затем я мог прикрепить их к панели enpty UiBinder? UiBinder полезен для меня, так как форма, с которой я имею дело, немного велика. - person Florian d'Erfurth; 28.03.2010
comment
Теперь он работает, я сделал несколько глупостей в своем сервлете, хотя он всегда включен:/ - person Florian d'Erfurth; 28.03.2010
comment
Фу, отлично! То, что значение всегда включено, действительно делает UiBinder бесполезным для этого варианта использования. Попытка установить значение с помощью тега g:RadioButton не работает, поскольку GWT затем жалуется на неоднозначные сеттеры. Возможно, нам следует сообщить об ошибке (code.google.com/p/google. -web-toolkit/проблемы/список)? - person Makkes; 28.03.2010
comment
большое спасибо :) странно то, что он даже не работает, когда я добавляю переключатели в VerticalPanel с помощью java. - person Florian d'Erfurth; 28.03.2010
comment
Вы должны установить значение явно, так как конструктор RadioButton(String, String) этого не делает. Сделайте это: rb0.setFormValue(apple); rb1.setFormValue(банан); Раздражает, правда! - person Makkes; 28.03.2010

Нет нет Нет Нет. Это не JSP, приятель!

Мне кажется, что вам нужно прочитать много документации о том, как работает GWT. Это я не могу прояснить в одном сообщении с ответом, но с чего-то начать:

1) Вы не запускаете свой код на сервере, это клиентская сторона! 2) Вы должны использовать GWT RPC для передачи данных на/с сервера 3) RTFM :)

person Jeroen    schedule 27.03.2010
comment
Ему не нужно использовать RPC для передачи данных на сервер - POST/GET для сервлета столь же жизнеспособен (а иногда, при работе с внешними приложениями и т. д., это единственный способ). И он, кажется, знает, что делает — он отправляет значения из формы (FormPanel) в сервлет — что в этом неправильного? - person Igor Klimer; 27.03.2010
comment
Безусловно, я использую сервлет еще и потому, что использую blobstore в других формах. - person Florian d'Erfurth; 28.03.2010