Spring SimpleFormController. Пример

Для того, чтобы управлять формами в Spring, Вам необходимо унаследовать класс контроллера от SimpleFormController. В нашем примере мы создадим форму для регистрации пользователя для того, чтобы понять как это работает. SimpleFormController - понятие устаревшее в рамках Spring 3.0. Поэтому, если Вы собираетесь использовать Spring 3.0 или выше, необходимо проставить соответствующие аннотации.
В это примере используется Spring 3.0, поэтому в коде встречаются аннотации SuppressWarnings. Мы наследуем UserController от SimpleFormController, что дает классу контроллера возможность управления формами. Обычно форма ассоциирована с определенным доменным объектом, в нашем случае, классом User. В Spring, этот доменный объект именуется командным объектом по умолчанию. Для того, чтобы сослаться на командный объект на странице jsp, необходимо установить командный класс с использованием метода setCommandClass(). Предположим, что класс User имеет свойство name и для того, чтобы сослаться на него из jsp страницы, будем использовать "command.name". Можно также изменить это имя с использованием метода setCommandName(). В нашем примере мы устанавливаем имя пользователя и будем ссылаться на него с использованием "user.name" в jsp странице.
Необходимо иметь метод для управления формой в тот момент, когда она будет отправлена на сервер. В нашем примере мы используем метод onSubmit() для этих целей. Этот метод имеет доступ к командному объекту. Сперва мы приводим класс командного объекта к User (наш доменный объект), а затем регистрируем пользователя посредством вызова метода add() в сервисном классе и возвращаем объект ModelAndView.
Все значения полей формы будут отправлены в формате String. Spring содержит несколько редакторов свойств для конвертирования строковых значений в нужные. В случае, если у вас есть кастомный тип данных, то необходимо сперва создать редактор свойств для управления этим процессом.
User Service интерфейс
Реализация User Service
Затем создадим форму регистрации пользователя с использованием тегов. Для использования тегов формы, необходимо сперва включить библиотеку тегов Spring.
Атрибут path используется для связи полей формы с доменным объектом. Мы использовали HTTP POST для отправки формы. Для того, чтобы связать поля формы с доменным объектом, командный объект должен иметь одинаковое имя на jsp странице и в классе контроллера. Для установки имени командного объекта на странице jsp, используется атрибут commandName тега form.
Далее, web.xml:
Теперь создаем конфигурационный файл бинов для Spring:
Как видите, мы использовали пространство имен "p". "p" - простое в использовании, с помощью него свойства могут быть представлены в виде атрибутов, а не элементов.
Для инъекции простых типов данных, мы используем "p", а для инъекции ссылок мы добавляем суффикс "-ref".
Например, p:formView используется для инъекции значения свойства view на форме, а p:userService-ref для инъекции в сервис пользователя.
Во время запроса HTTP GET сгенерится formView. Затем, когда форма будет отправлена (во время HTPP POST), вызовется метод onSubmit() в классе UserController. В случае успешного завершения метода сгенерируется successView. В случае, если произойдут ошибки трансформации или валидации, formView отобразится пользователю.
Запустим пример посредством redirect.jsp. Файл redirect.jsp перенаправит запрос к "userRegistration.htm".

Заполним форму и отправим ее.
Вызовется метод onSubmit() в классе UserController, а управление передастся на представление "userSuccess". В примере мы используем InternalResourceViewResolver, поэтому отобразится userSuccess.jsp.
Страница userSuccess.jsp:
Материалы, которые могут вас заинтересовать
- Spring: Контроллеры, основанные на аннотациях / Annotation Controller. Пример
- Spring. Теги на форме / Form Tags
- Пример Spring MVC
- Spring. Внедрение через конструктор / Constructor injection
- Spring. Внедрение через сеттер / Setter injection
- Spring IoC. Пример
- Spring. Как это работает? Часть 3
- Spring. Как это работает? Часть 2: Создание бинов через вызов конструктора
- Spring. Как это работает? Часть 1







Скажите max а название формы для заполнения будет
userRegistration.jspили
userForm.jspЗаранее благодарю
userForm
Запускаю
http://localhost:8084/SpringWebApplication01/userRegistration.htm
форма для ввода данных
userForm.jspNo mapping found for HTTP request with URI [/SpringWebApplication01/userRegistration.htm] in DispatcherServlet with name 'dispatcher'
Что-то у меня не так
Заранее благодарю
Только что попробовал у себя - работает.
Вот попробуйте запустить у себя war файл на основе исходников в этом посте.
Скачать можно отсюда: http://cloud-cuckoo.com.ua/files/SpringWebApplication01.war
Странно из под netbeans 6.10m1
так и не идет а просто Tomcat\webapps
без проблем
Чего-то netbeans не понимает
А в какой IDE работаете ?
Я в eclipse. Развернутый проект из-под еклипса+томкат запускается.
Надо копать в сторону конфигов - web.xml, dispatcher-servlet.xml.
Посмотреть, соответствует ли расположение .jsp файлов описанию в xml-ках.
А можно уточнить как работает
<bean id="userService" class="firststeps.spring.service.UserServiceImpl" />
<bean name="/userRegistration.htm" class="firststeps.spring.web.UserController"
p:userService-ref="userService"
p:formView="userForm"
p:successView="userSuccess"
/>
По какой идеологии и куда направляется Dispatcher Servlet
В xml раскладке необходимо описать Mapping и проч.
Заранее благодарю
<bean name="/userRegistration.htm" class="firststeps.spring.web.UserController" - '/userRegistration.htm' - это всего лишь алиас. Физически у нас нет такой страницы. Можно задать здесь что угодно, например '/asdf.jsp''. Это означает, что при вводе в адресной строке такого урла, управление будет передано в UserController + заменить адрес страницы в redirect.jsp
Отправить комментарий