Бесплатный курс по Java: от основ до продвинутого уровня
Специальный тег 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 для связывания полей объекта с 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. Практический пример работы с сессиями, транзакциями и маппингом сущностей.