Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > springMVC forms


Автор: skhilkov 16.12.2008, 08:43
Здрасте!
Начал изучать спринг webMVC. Все вроде более-менее понятно.. было  smile,  пока не столкнулся со следующей задачей - разместить на одной страничке несколько форм. Например на страничке есть форма логина, форма голоосования.. ну и мало ли чего там может быть... То есть у нас есть страничка index.htm, ее view index.jsp. Если использовать spring forms и SimpleFormController, то возможно обрабатывать нормально только одну форму.  Погуглил, нашел пару решений : 
1) на всей страничке есть одна форма, но с разными сабмит-кнопками.
2) Использовать обычные формы, которые ссылаются на разные урлы, а затем после обработки происходит редирект на index.htm. 

Первое решение показалось мне не очень правильным... корявым чтоли... ведь у меня одна форма может использоваться на 100 страничках, а при этом подходе мне грозит мнооого копипаста ))

Второе решение в принципе показалось правильным. Есть момент, который надо разрулить но все же можно: 
одна форма на 100 страничках. В этом случае мне нужно запоминать страничку, на которую надо редиректить(то есть если я находился на странице somepage.htm и залогинился, то контроллер меня должен перенаправить на страничку somepage.htm) Как вариант это дело можно хранить в модели. Кстати правильным ли будет такой подход: держать модель(map) в сессии или контексте, а в контроллерах ее модифицировать?

Ну а еще самое главное что меня гложет - это то что я что-то не так понял )) Ведь ситуация достаточно распространенная.... Не могли же разработчики Spring не подумать о таких вещах....  Поэтому пожалуйста, все замечания/советы/вопросы/предложения/дискуссии/обсуждения оооочень приветствуются!

Автор: Samotnik 16.12.2008, 11:04
если говорить про сами формочки, то можно написать шаблоничк .ftl который, потом подгружать, когда необходимо и куда необходимо. 
И первое решение тоже правильно, допустим есть 3-4 формы на странице - и их можно сабмитить, никаких сложностей не должно возникнуть. 
А вот второй способ, мне как раз и не нравиться, это не эффективно, делать редиректы.  Вид должен быть классический : Страничка -  сабмит - данный улетели на сервер.   smile 
Почитайте про шаблоны и динамическую подгрузку. Тогда не придется много копипастить. Будет один всего навсего шаблон, который вы сможете подгрузить  smile 

Автор: skhilkov 16.12.2008, 17:57
Samotnik, 
курю маны спринг. Тут вроде пишут что редиректы - нормальное дело(даже вроде как хорошее дело):
Цитата

It is sometimes desirable to issue an HTTP redirect back to the client, before the view is rendered. This is desirable for example when one controller has been called with POSTed data, and the response is actually a delegation to another controller (for example on a successful form submission). In this case, a normal internal forward will mean the other controller will also see the same POST data, which is potentially problematic if it can confuse it with other expected data. Another reason to do a redirect before displaying the result is that this will eliminate the possibility of the user doing a double submission of form data. The browser will have sent the initial POST, will have seen a redirect back and done a subsequent GET because of that, and thus as far as it is concerned, the current page does not reflect the result of a POST, but rather of a GET, so there is no way the user can accidentally re-POST the same data by doing a refresh. The refresh would just force a GET of the result page, not a resend of the initial POST data.

А вот эта строчка 
Цитата

response is actually a delegation to another controller (for example on a successful form submission)

как раз подходит под описание второго подхода....

Курю дльше ......

ПС Товарищи со знанием спрингМВС, не оставайтесь в стороне, а? ))

Автор: check 16.12.2008, 21:46
Если несколько форм на странице, то проще всего так
Код

<c:import url="/form1_page.htm"/>
<c:import url="/form2_page.htm"/>



А если одна форма на нескольких страницах,  то WizardFormController.

Автор: _sten_ 16.12.2008, 22:35
Цитата

Кстати правильным ли будет такой подход: держать модель(map) в сессии или контексте, а в контроллерах ее модифицировать?

нет

Почитай о Spring Tiles

Автор: skhilkov 18.12.2008, 12:18
_sten_,  если я правильно понял, Вы имели ввиду Apache Tiles? Что-то про Spring Tiles я не нашел ничего...(искал не сильно долго, может чего и упустил...).
Итак, если я правильно понял... В общем не хотелось бы еще с другими технологиями заморачиваться.. Хочется сделать все средствами spring MVC... Вопрос на засыпку - это возможно вообще? ))

Добавлено через 2 минуты и 23 секунды
check, то есть в данном случае дернется нужный контроллер, и можно привязывать валидаторы? Хорошая идея!! Сегодня же попробую!!

Автор: _sten_ 18.12.2008, 14:55
В книге Manning Spring in Action 2nd Edition.pdf глава "14.3 Laying out pages with Tiles"  smile 
Имеется ввиду интеграция с Jakarta Tiles

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)