Специальный тег Form в Spring

В спринг есть специальные теги, которые упрощают нам разработку.

В этом уроке рассмотрим специальный тег form:form.

Тег form:form обеспечивает прямую привязку полей объекта модели вашего приложения к полям ввода HTML-формы.

Давайте создадим простой класс SomeUser с одним полем, геттерами и сеттерами.

package classes; import org.springframework.stereotype.Component; @Component public class SomeUser { // определим поле, которое в объекте SomeUser // будет напрямую привязано к текстовому // полю в форме. и сеттеры геттеры для него private String userName; public SomeUser() { } }

Как видим, пока сеттеров в классе нет. Это было сделано специально, чтобы продемонстрировать один важный прием работы в Eclipse, который нужно знать, поскольку благодаря нему программисту не придется писать большое количество рутинного кода.

Так вот, Eclipse может сам генерировать геттеры и сеттеры для полей в классе. Для этого нужно нажать правой кнопкой мыши в любом месте класса без кода и выбрать Generate Getters and Setters.

Отмечаем поле для которого нужно сгенерировать геттер сеттер и нажимаем generate.

Как видим, магическим образом в классе появились геттер и сеттер для поля userName и писать вручную ничего не пришлось.

package classes; import org.springframework.stereotype.Component; @Component public class SomeUser { // определим поле которое в объекте SomeUser // будет напрямую привязано к текстовому // полю в форме, и сеттеры геттеры для него private String userName; public SomeUser() { } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } }

Генерировать можно не только геттеры и сеттеры.

Можно, например, сгенерировать переопределения методов Оbject для данного класса, таких как ToString, equals и hashCode, что очень удобно.

Итак класс, объект которого мы будем создавать и связывать этот объект с формой мы написали. Теперь давайте же создадим этот объект. Создаваться он будет в обработчике и помещаться в аттрибут в Model.

То есть правильно будет сказать, что спринг форма будет напрямую связана с объектом, который находиться в аттрибуте.

Этот обработчик помимо того, что создает аттрибут c объектом SomeUser будет перенаправлять на страницу с формой, где этот объект в аттрибуте будет связываться с формой.

Новый обработчик:

package classes; import javax.servlet.http.HttpServletRequest; @Controller @RequestMapping(“/FirstController”) public class MVCcontroller{ @RequestMapping(“/FirstJSP”) public String FirstJSP() { return “JSPpage”; } @RequestMapping(“/SecondJSP”) public String SecondJSP() { return “JSPpage1”; } @RequestMapping(“/FormPage”) public String FormPage() { return “FormPage”; } @RequestMapping(“/FormProcessingController”) public String FormProcessingController( HttpServletRequest req, Model model) { model.addAttribute(“responseMsg”, (req.getParameter(“username”)+” entered!”)); return “FormProcessingPage”; } // Новый обработчик @RequestMapping(“/FormTagPage”) public String FormTagPage(Model model) { // здесь создаем аттрибут, передавая в него // экземпляр, с которым будет связана форма // на странице FormTagPage model.addAttribute(“someuser”,new SomeUser()); return “FormTagPage”; } }

Давайте же свяжем форму на странице на которую переводит только что определенный обработчик /FormTagPage и объект в аттрибуте в модели.

Страница с формой:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> <%@ page isELIgnored="false" %> Insert title here

Теперь давайте создадим этот обработчик, который был прописан в теге action у формы.

м package classes; import javax.servlet.http.HttpServletRequest; @Controller @RequestMapping(“/FirstController”) public class MVCcontroller{ @RequestMapping(“/FirstJSP”) public String FirstJSP() { return “JSPpage”; } @RequestMapping(“/SecondJSP”) public String SecondJSP() { return “JSPpage1”; } @RequestMapping(“/FormPage”) public String FormPage() { return “FormPage”; } @RequestMapping(“/FormProcessingController”) public String FormProcessingController( HttpServletRequest req, Model model) { model.addAttribute(“responseMsg”, req.getParameter(“username”)+” entered!”); return “FormProcessingPage”; } @RequestMapping(“/FormTagPage”) public String FormTagPage(Model model) { model.addAttribute(“someuser”,new SomeUser()); return “FormTagPage”; } //Новый обработчик @RequestMapping(“/FormTagProcessor”) //с помощью аннотации @ModelAttribute принимаем атрибут //посланный формой в этот обработчик и помещаем //экземпляр из него в новый экземпляр someUser public String FormTagProcessor( @ModelAttribute(“username”) SomeUser someUser) { //Воспользуемся этим объектом. Проверим //содержится ли в поле userName этого объекта то //что вводилось в текстовое поле в форме. //Выведем на консоль томcat содержимое поля //userName в новом объекте someUser System.out.println(someUser.getUserName()); //Далее переданынй в тот обработчик объект(аттребут) //доступен на jsp странице, на которую //происходит переход из этого обработчика. //Тоесть на FormTagProcessingPage. return “FormTagProcessingPage”; } }

Теперь извлечем на странице на которую переводит только что определенный обработчик поле объекта в аттрибуте. В этом поле, ясное дело, содержится то, что вбивал в текстовое поле формы пользователь.

м <%@ page isELIgnored="false" %> Auth Form

${username.userName}

Проверка работы приложения.

Перейдем на страницу с формой через обработчик по пути /FormTagPage.

Введем в поле текст и нажмем submit.

Видим в консоли Tomcat, что новый объект в обработчике /FormTagProcessor содержит то, что вводил в текстовое поле формы пользователь.

Видим, что обработчик успешно перенаправил на вторую страницу и объект, который содержит то, что писал пользователь в текстовые поля формы был успешно передан этим обработчиком на эту страницу.

Теги Spring Form: Select, Radio, Checkbox

Изучите теги Spring Form: Select, Radio, Checkbox для связывания полей объекта с HTML-формой. Практические примеры работы с form:select, form:radio и form:checkbox в Spring MVC.
Time to read: 19

Валидация форм в Spring MVC

Настройте валидацию форм в Spring MVC с аннотациями @NotNull, @Size, @Min/@Max и @Pattern. Примеры проверки данных, обработка ошибок и кастомизация сообщений.
Time to read: 21

Введение в ORM с использованием Hibernate

Основы ORM с Hibernate: сохранение объектов в БД, настройка проекта, аннотации @Entity и @Table. Практический пример работы с сессиями, транзакциями и маппингом сущностей.
Time to read: 20