Для обработки формы необходимо выполнить следующую последовательность действий:
Создать объект, поля которого будут содержать данные формы. В нашем случае создадим класс Student ;
Передать пустой объект Student при переходе на страницу формы;
В полях формы настроить соответствие между полями формы и полями объекта класса Student ;
После отсылки формы заполненный объект Student передается в теле HTTP-запроса с методом POST, после чего заполненный объект можно обработать, сохранить в базе данных и так далее.
Создадим класс Student
Copy public class Student {
private long id;
private String lastName;
private String firstName;
private String patronymic;
private String email;
private String phone;
private String address;
public long getId () {
return id;
}
public void setId ( long id) {
this . id = id;
}
public String getLastName () {
return lastName;
}
public void setLastName ( String lastName) {
this . lastName = lastName;
}
public String getFirstName () {
return firstName;
}
public void setFirstName ( String firstName) {
this . firstName = firstName;
}
public String getPatronymic () {
return patronymic;
}
public void setPatronymic ( String patronymic) {
this . patronymic = patronymic;
}
public String getEmail () {
return email;
}
public void setEmail ( String email) {
this . email = email;
}
public String getPhone () {
return phone;
}
public void setPhone ( String phone) {
this . phone = phone;
}
public String getAddress () {
return address;
}
public void setAddress ( String address) {
this . address = address;
}
public Student () {}
public Student ( String lastName , String firstName , String patronymic , String email , String phone , String address) {
this . lastName = lastName;
this . firstName = firstName;
this . patronymic = patronymic;
this . email = email;
this . phone = phone;
this . address = address;
}
}
Изменим метод контроллера, который обрабатывает URL "/add_student ". Передадим пустой объект студента
Copy @ Controller
public class StudentController {
...
@ GetMapping ( "/add_student" )
public String addStudent ( Model model) {
model . addAttribute ( "student" , new Student() );
return "add_student" ;
}
}
Изменим файл add_student.html . В полях формы добавим привязку к полям объекта, в теге формы укажем название объекта (исходя из метода контроллера он должен называться "student ", а также укажем URL для отправки данных формы).
Copy <form enctype="multipart/form-data" action="#" th:action="@{/add_student}" th:object="${student}" method="post" class="needs-validation"
novalidate>
<div class="row">
<div class="col-md-12">
<h4 class="mb-3">Поля для заполнения</h4>
<div class="row">
<div class="col-md-4 mb-3">
<label for="lastName">Фамилия</label>
<input th:field="*{lastName}" type="text" class="form-control" id="lastName" placeholder=""
value="" required>
</div>
<div class="col-md-4 mb-3">
<label for="firstName">Имя</label>
<input th:field="*{firstName}" type="text" class="form-control" id="firstName" placeholder=""
value="" required>
</div>
<div class="col-md-4 mb-3">
<label for="patronymic">Отчество</label>
<input th:field="*{patronymic}" type="text" class="form-control" id="patronymic" placeholder=""
value="" required>
</div>
</div>
<div class="mb-3">
<label for="email">Электронная почта</label>
<input th:field="*{email}" type="email" class="form-control" id="email"
placeholder="" value="" required>
</div>
<div class="mb-3">
<label for="phone">Телефон</label>
<input th:field="*{phone}" type="text" class="form-control" id="phone"
placeholder="(ХХХ) ХХХ-ХХХХ" value="" required>
</div>
<div class="mb-3">
<label for="address">Домашний адрес</label>
<input th:field="*{address}" type="text" class="form-control" id="address" placeholder="" value=""
required>
</div>
<hr class="mb-4">
<button class="btn btn-primary btn-lg btn-block" type="submit" value="Submit">Добавить студента</button>
</div>
</div>
</form>
Создадим метод контроллера, который принимает POST -запрос с URL "/add_student ". Данный метод будет обрабатывать результат заполнения формы.
Copy @ Controller
public class StudentController {
...
@ PostMapping ( "/add_student" )
public String greetingSubmit (@ ModelAttribute Student student) {
return "redirect:/" ;
}
}
Изменим класс Student , превратив его в сущность
Copy @ Entity
@ Table (name = "student" )
public class Student {
@ Id
@ GeneratedValue
private long id;
private String lastName;
private String firstName;
private String patronymic;
private String email;
private String phone;
private String address;
public long getId () {
return id;
}
public void setId ( long id) {
this . id = id;
}
public String getLastName () {
return lastName;
}
public void setLastName ( String lastName) {
this . lastName = lastName;
}
public String getFirstName () {
return firstName;
}
public void setFirstName ( String firstName) {
this . firstName = firstName;
}
public String getPatronymic () {
return patronymic;
}
public void setPatronymic ( String patronymic) {
this . patronymic = patronymic;
}
public String getEmail () {
return email;
}
public void setEmail ( String email) {
this . email = email;
}
public String getPhone () {
return phone;
}
public void setPhone ( String phone) {
this . phone = phone;
}
public String getAddress () {
return address;
}
public void setAddress ( String address) {
this . address = address;
}
public Student () {
}
public Student ( String lastName , String firstName , String patronymic , String email , String phone , String address) {
this . lastName = lastName;
this . firstName = firstName;
this . patronymic = patronymic;
this . email = email;
this . phone = phone;
this . address = address;
}
}
Создадим интерфейс репозитория
Copy public interface StudentRepository extends JpaRepository < Student , Long > {}
Добавим класс сервиса для работы с DAO
Copy @ Service
public class StudentService {
private StudentRepository repository;
@ Autowired
public void setRepository ( StudentRepository repository) {
this . repository = repository;
}
public void saveStudent ( Student student) {
repository . save (student);
}
}
Изменим класс контроллера. После получения результатов заполнения формы, данные будут сохраняться в базе данных.
Copy @ Controller
public class StudentController {
private StudentService service;
@ Autowired
public void setService ( StudentService service) {
this . service = service;
}
...
@ PostMapping ( "/add_student" )
public String greetingSubmit (@ ModelAttribute Student student) {
service . saveStudent (student);
return "redirect:/" ;
}
}