![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| makados |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 2.10.2007 Где: Киев Репутация: 1 Всего: 1 |
Возникла надобность сделать гостевую книгу. На странице отображаются отзывы посетителей и на этой же странице находится форма для ввода отзыва. Страницу обслуживает один контроллер, унаследованный от SimpleFormController.
Код контроллера:
Когда откывается данная страница, срабатывает метод handleRequest и нормально отображается уже существующие отзывы. Но при создании нового отзыва после нажатия кнопки Submit все-равно срабатывает handleRequest, а не onSubmit. Хотя данные, введенные в форму в httpServletRequest есть. По сути, всегда вызывается handleRequest. Код веб-формы (страница /feedback.html).:
Объявление контроллера:
Как сделать, чтобы при нажатии на кнопку Submit происходил сабмит формы, так как хочется иметь нормальную валидацию и сообщения об ошибках? |
||||||
|
|||||||
| Kangaroo |
|
|||
|
AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
makados,
вам не нужно перекрывать handleRequest, если вы используете SimpleFormController. onSubmit как раз и вызывается из handleRequest( через цепочку других методов). Посмотрите исходники Spring'a. Вам нужно перекрыть formBackingObject - тут вы будете доставать отзывы и класть их в коммандкласс. -------------------- Lost.... |
|||
|
||||
| makados |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 2.10.2007 Где: Киев Репутация: 1 Всего: 1 |
в том и проблема, что в методы onSubmit и formBackingObject не заходит вообще
|
|||
|
||||
| Kangaroo |
|
|||
|
AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
makados,
я же написал уже -------------------- Lost.... |
|||
|
||||
| makados |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 2.10.2007 Где: Киев Репутация: 1 Всего: 1 |
это я пробовал. Но тогда не отображаются уже созданные отзывы. Ведь мне надо отобразить одновременно отзывы (этим занимается handleRequest) и обработать форму, если был сабмит.
|
|||
|
||||
| Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
makados, идеологически гораздо правильнее вообще разнести действия по обработке формы и по выводу постов. Делается это через паттерн PRG (Post-Redirect-Get). Для этого придется написать отдельный сервлет (скажем, SupmitPost), который будет сохранять данные из формы, а под конец обработки вызывать редирект: response.sendRedirect("/feedback.html").
И все сразу станет просто и очевидно -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
| Kangaroo |
|
|||
|
AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
А для это как раз и нужен formBackingObject. Смысл такой: Приходит ГЕТ запрос - в формбекингобджекте достаются отзывы - отзывы показываются на странице - приходит ПОСТ запрос - в онСабмите он сохраняется - контроллер перенаправляет на себя же самого - опять ГЕТ запрос.... Вот такая цепочка. Надеюсь теперь понятно. Добавлено через 10 минут и 59 секунд Stampede, ваш вариант подойдет для обычных сервлетов, но не для Спринга. -------------------- Lost.... |
|||
|
||||
| makados |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 2.10.2007 Где: Киев Репутация: 1 Всего: 1 |
Kangaroo, теперь идея понятна. Но есть вопрос по реализации. Форма ведь ожидает класс Feedback (command class), а для вывода требуется List<Feedback>. И для отображения страницы нужны оба этих объекта. Как с метода formBackingObject передать в страницу эти объекты в виде, который страница сможет воспринять?
И что будет, если валидатор обнаружит ошибки при таком подходе? Отобразятся ли они на странице? Аналогичный вопрос про ошибки, как их отобразить на странице? |
|||
|
||||
| Kangaroo |
|
||||
|
AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
Command class - это не обязательно просто Feedback. В данном случае это будет класс, который содержит два поля: Feedback feedback & List<Feedback> feedbacks. Тогда поля формы будут маппится на feedback, а выводится будет список feedbacks.
Да -------------------- Lost.... |
||||
|
|||||
| makados |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 2.10.2007 Где: Киев Репутация: 1 Всего: 1 |
Kangaroo, огромное спасибо за помощь и терпение
|
|||
|
||||
| Kangaroo |
|
|||
|
AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
Да не за что -------------------- Lost.... |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |