Обработка форм в Spring
Большинство интернет приложений ведут диалог с пользователем. Во многих случаях это реализуется через html-формы. Spring предоставляет разработчику богатый набор средств обработки этих объектов. В этой статье будет представлена простейшая форма, обрабатываемая средствами spring.
Первым делом необходимо создать класс, описывающий форму:
JAVA:
Далее необходимо создать валидатор для этой формы:
JAVA:
public boolean supports(Class clazz) { if (PersonForm.class.equals(clazz)){ return true; } return false; } PersonForm form = (PersonForm) obj; if (form.getFirstname().length() > 15){ errors.rejectValue("firstname", "Length of firsname must be less then 15 chars"); } if (form.getAge() < 18){ errors.rejectValue("age", "Person too young"); } } }
После того, как форма и валидатор готовы, можно приступить к написанию логики:
JAVA:
@RequestMapping(value = "/new_person.html", method = RequestMethod.POST) PersonForm personForm, BindingResult result) { new PersonFormValidator().validate(personForm, result); if (result.hasErrors()) { } } @RequestMapping(value = "/new_person.html", method = RequestMethod.GET) PersonForm personForm, BindingResult result) { }
Если форма не проходит валидацию, то возвращаемся на страницу редактирования формы. Если все в порядке, то переходим к странице со списком персон.
Теперь осталось написать jsp-страницу, содержащую элементы для ввода данных. Ниже представлен код jsp-страницы, описывающий форму.
XML:
<form:form commandName="person"> <table> <tr> <td>Last name</td> <td><form:input path="lastname" /></td> <td><form:errors path="lastname"/></td> </tr> <tr> <td>First name</td> <td><form:input path="firstname" /></td> <td><form:errors path="firstname"/></td> </tr> <tr> <td>Age</td> <td><form:input path="age" /></td> <td><form:errors path="age"/></td> </tr> <tr> <td>#</td> <td><input type="submit" /></td> </tr> </table> </form:form>
В теге form:form определено имя коммандного объекта (person). По умолчанию, переменная, в которой хранится коммандный объект именуется command. Для каждого поля формы определяется элемент ввода и позиция, в которую будут выводиться ошибки.
На этом процедуры по созданию и обработке формы завершены.

02 Апр 2009 в 4:07 пп
Извините, но очень много телепатии требуется чтобы научиться по таким мануалом, ну откудаж мне, ньюбу знать что в jsp надо добавить загаловок
имена файлов в листингах не всегда подписаны, некоторые действия пропущены.
03 Апр 2009 в 10:07 дп
Спасибо за замечание! Действительно, трудно описать все детали, когда они уже как само собой разумеющееся. Еще раз пересмотрю статьи и добавлю в них больше подробностей.
01 Июль 2009 в 12:47 пп
Лезут ошибки по поводу локали при отрицательном резульате валидации. Cейчас попытаюсь обозначить:
[logs]
01.07.2009 12:45:29 org.springframework.web.servlet.tags.RequestContextAwareTag doStartTag
SEVERE: No message found under code ‘Person too young.person.age’ for locale ‘en_US’.
…….
[/logs]
зы просьба строго не судить, начинающий я
20 Окт 2009 в 9:59 пп
Надо: errors.rejectValue(”firstname”, “required”, “Length of firsname must be less then 15 chars”);
30 Янв 2010 в 11:24 пп
В 6 строке в коде контроллера полагаю надо заменить “new PersonForm()” на “result.getModel()”