В этом руководстве рассказывается о том, как создать и отправить форму, а также о том, как проверить нашу регистрационную форму.
IDE – Затмение
JDK 1.8 или более поздней версии
Уровень 4+ или Maven 3.2+
Набор инструментов Spring (STS) или вы можете использовать Spring Initializr
Вы можете обратиться к исходному коду ниже. Вы можете обратиться к исходному коду ниже.
Шаг 1. Создание проекта
- Файл → Новый → Весенний Стартовый проект
- Заполните необходимую информацию и добавьте зависимости.
- Исследователь проектов выглядит так.
Шаг 2. Давайте начнем кодировать
Давайте начнем кодировать
package com.reytech.demo.model; import java.time.LocalDate; import java.util.List; import javax.validation.constraints.Email; import javax.validation.constraints.Max; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import javax.validation.constraints.Past; import javax.validation.constraints.Positive; import javax.validation.constraints.Size; import org.springframework.format.annotation.DateTimeFormat; public class Student { @NotEmpty(message = "{validation.name.NotEmpty}") @Size(min = 2, max = 50, message = "{validation.name.Size}") private String name; @NotNull(message = "{validation.age.NotNull}") @Positive(message = "{validation.age.Positive}") @Max(value = 18, message = "{validation.age.Maximum}") private Integer age; @NotEmpty(message = "{validation.email.NotEmpty}") @Email(message = "{validation.email.Type}") private String email; @NotEmpty(message = "{validation.subjects.NotEmpty}") private Listsubjects; @NotNull(message = "{validation.birthDate.NotNull}") @Past(message = "{validation.birthDate.Past}") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate birthDate; @NotEmpty(message = "{validation.gender.NotEmpty}") private String gender; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public LocalDate getBirthDate() { return birthDate; } public void setBirthDate(LocalDate birthDate) { this.birthDate = birthDate; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public List getSubjects() { return subjects; } public void setSubjects(List subjects) { this.subjects = subjects; } }
Мы будем хранить информацию о студентах в Student.class модель.
И @Size, @NotEmpty, @Email и т. Д. Предназначены для проверки ввода, когда пользователь вводит ввод с ошибкой.
Мы будем использовать пользовательское сообщение, создав message.properties. , вы можете увидеть пользовательское сообщение в файле messages.properties.)
, вы можете увидеть пользовательское сообщение в файле messages.properties.)
- Мы установим пользовательские сообщения.
validation.name.NotEmpty=Please fill in Name validation.name.Size=Name size must be between 2 and 30 validation.name.Pattern=Name must be only characters validation.age.NotNull=Please fill in Age validation.age.Maximum=Age must be under 18 validation.age.Positive=Age must not be negative value and 0 validation.age.Pattern=Age must be only numbers validation.email.NotEmpty=Please fill in Email validation.email.Type=Please fill in valid Email validation.birthDate.NotNull=Please fill in Birth Date validation.birthDate.Past=Please fill in valid Birth Date validation.subjects.NotEmpty=Please select Subjects validation.gender.NotEmpty=Please select Gender
Мы установим пользовательские сообщения.
- Для обработки message.properties необходимы источник сообщения и LocalValidatorFactoryBean.
package com.reytech.demo; import org.springframework.context.MessageSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.ReloadableResourceBundleMessageSource; import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; @Configuration public class AppConfiguration { @Bean public MessageSource messageSource() { ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); messageSource.setBasename("classpath:messages"); messageSource.setDefaultEncoding("UTF-8"); return messageSource; } @Bean public LocalValidatorFactoryBean validator() { LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean(); bean.setValidationMessageSource(messageSource()); return bean; } }
Источник сообщения
package com.reytech.demo.constant; public enum Gender { MALE,FEMALE,OTHER }
Источник сообщения
package com.reytech.demo.constant; public enum Subject { MYANMAR("Myanmar"), ENGLISH("English"), MATH("Math"), CHEMISTRY("Chemistry"), PHYSICS("Physics"), BIO("Bio"), ECO("Eco"); private final String value; private Subject(String value) { this.value = value; } public String getValue() { return value; } }
Источник сообщения
package com.reytech.demo.controller; import javax.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import com.reytech.demo.constant.Gender; import com.reytech.demo.constant.Subject; import com.reytech.demo.model.Student; @Controller public class HomeController { @GetMapping("/form") public String showForm(Model model) { Student student = new Student(); model.addAttribute("student", student); model.addAttribute("gender_value", Gender.values()); model.addAttribute("subject_value", Subject.values()); return "form"; } @PostMapping("/form/result") public String submitForm(@Valid Student student, BindingResult bindingResult, Model model) { if (bindingResult.hasErrors()) { model.addAttribute("student", student); model.addAttribute("gender_value", Gender.values()); model.addAttribute("subject_value", Subject.values()); return "form"; } else { model.addAttribute("result", student); return "result"; } } @GetMapping("/back") public String backHome() { return "redirect:/form"; } }
Контроллер используется для обработки запросов GET/POST в конечной точке/HTTP.
Метод showForm() состоит в том, чтобы достичь localhost:/8080/формы в качестве запроса на ПОЛУЧЕНИЕ и вернуть представление, которое form.html с помощью тимелифа. Он использует объект модели для отображения нового объекта учащегося в шаблоне представления. Значения пола и предметов переносятся с помощью атрибута model.add и отображают результат в result.html .
Метод Saveform() заключается в том, чтобы достичь локального хоста: 8080/форма/результат в качестве запроса POST при отправке данных пользователем. Отправленные данные сохраняются в разделе “результат” и переносятся с помощью атрибута model.AddAttribute. И этот метод возвращает представление, которое result.html но он возвращается обратно к form.html при отправке данных возникают ошибки.
И этот метод возвращает представление, которое result.html но он возвращается обратно к form.html при отправке данных возникают ошибки.
- Мы создадим форму для заполнения данных form.html .
Form_Registration Form Registration
Мы создадим форму для заполнения данных form.html .
- Мы создадим страницу для отображения представленных данных в result.html .
Result Result
Title Value Student Name Age Date of Birth Subjects
Gender
Если вам нужна дополнительная информация о шаблонах Thymeleaf, загляните в Учебное пособие по Thymeleaf .
Шаг 3. Давайте запустим наше приложение
Давайте перейдем на локальный хост:8080/форма, и мы увидим следующую форму.
Давайте отправим некоторые данные об ошибках, а затем мы сможем увидеть сообщения об ошибках.
Давайте представим правильные данные.
Теперь мы можем увидеть результат в localhost:8080/форма/результат.
Оригинал: “https://dev.to/reytech-lesson/form-submitting-with-spring-boot-validation-5clg”