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

Помимо тега form:input, рассмотренного в прошлом уроке, есть также и другие теги с которыми мы можем связывать поля объекта в аттрибуте.

В этом уроке рассмотрим теги form:select, form:radio и form:checkbox.

Эти теги аналоги всем известных html тегов, которые предоставляют пользователю варианты выбора.

Напомним как они выглядят:

Добавим в класс объекта, который будет в аттрибуте, новые поля. Эти поля будут связываться с новыми тегами в форме так же, как в прошлом уроке связывался form:input с полем объекта.

package classes; import java.util.LinkedHashMap; import org.springframework.stereotype.Component; @Component public class SomeUser{ private String userName; //создадим поле, в которое будет записываться //то что выбрал пользователь в form:select private String userCountry; //в это поле сохр. значение form:radiobutton private String userLanguage; //в этот массив сохраняются //значения form:checkbox. Массив это //потому что пользователь может выбрать //несколько значений checkbox. private String[] userBrowser; public SomeUser() { } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserCountry() { return userCountry; } public void setUserCountry(String userCountry) { this.userCountry = userCountry; } public String getUserLanguage() { return userLanguage; } public void setUserLanguage(String userLanguage) { this.userLanguage = userLanguage; } public String[] getUserBrowser() { return userBrowser; } public void setUserBrowser(String[] userBrowser) { this.userBrowser = userBrowser; } }

Давайте теперь свяжем новые поля в объекте в аттрибуте username c новыми тегами в форме на странице.

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

<%@ 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 username:

English Ukrainian Russian
Mozilla Chrome Edge

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

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(“resposeMsg”, (req.getParameter(“username”)+” entered!”)); return “FormProcessingPage”; } @RequestMapping(“/FormTagPage”) public String FormTagPage(Model model) { model.addAttribute(“someuser”,new SomeUser()); return “FormTagPage”; } @RequestMapping(“/FormTagProcessor”) public String FormTagProcessor( @ModelAttribute(“username”) SomeUser someUser) { System.out.println(someUser.getUserName()); //теперь выведем и выбранные пользователем //значения в консоль. System.out.println(someUser.getUserCountry()); System.out.println(someUser.getUserLanguage()); System.out.println(someUser.getUserBrowser()); //а также они будут отправлены на страницу //FormTagProcessorPage.jsp и выведены там return “FormTagProcessingPage”; } }

На странице на которую перенаправляет пользователя обработчик извлечем выбранные пользователем значения из объекта в аттрибуте username.

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

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page isELIgnored="false" %> Auth Form

${username.userName}

${username.userCountry}

${username.userLanguage}

${listelement}

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

Нажмем submit.

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

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

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

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

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

Обзор языка запросов HQL в Hibernate

Изучите HQL в Hibernate: объектно-ориентированный язык запросов для работы с БД через классы. Примеры запросов, сравнение с SQL и практическое применение в Java-приложениях.
Time to read: 17