Spring SimpleFormController. Пример

max аватар
88
Находится в разделах:

Для того, чтобы управлять формами в 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"

spring form

Заполним форму и отправим ее.

Вызовется метод onSubmit() в классе UserController, а управление передастся на представление "userSuccess". В примере мы используем InternalResourceViewResolver, поэтому отобразится userSuccess.jsp

Страница userSuccess.jsp:


Конец
Сэмюэл Смайлс абсолютно уверен в том, что из-за отсутствия контроля над собой многие люди всю жизнь проводят в борьбе с трудностями, которые сами же и создали. Их собственная упрямая жестокость не дает им добиться успеха.

Скажите max а название формы для заполнения будет

userRegistration.jsp

или

userForm.jsp

 

Заранее благодарю

max аватар

userForm

Запускаю

http://localhost:8084/SpringWebApplication01/userRegistration.htm

форма для ввода данных

userForm.jsp

 

No mapping found for HTTP request with URI [/SpringWebApplication01/userRegistration.htm] in DispatcherServlet with name 'dispatcher'

Что-то у меня не так

 

Заранее благодарю

max аватар

Только что попробовал у себя - работает. 

Вот попробуйте запустить у себя war файл на основе исходников в этом посте. 

Скачать можно отсюда: http://cloud-cuckoo.com.ua/files/SpringWebApplication01.war

Странно из под netbeans 6.10m1

так и не идет а просто Tomcat\webapps

без проблем

 

Чего-то netbeans не понимает

 

 

 

А в какой IDE работаете ?

max аватар

Я в 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 и проч.

Заранее благодарю

 

 

 

max аватар

<bean name="/userRegistration.htm" class="firststeps.spring.web.UserController"   - '/userRegistration.htm' - это всего лишь алиас. Физически у нас нет такой страницы. Можно задать здесь что угодно, например '/asdf.jsp''. Это означает, что при вводе в адресной строке такого урла, управление будет передано в UserController + заменить адрес страницы в redirect.jsp

 

Отправить комментарий

CAPTCHA
Чтобы оставить комментарий, введите пожалуйста код, изображенный на картинке
Image CAPTCHA
Введите символы, изображенные на картинке