3. Получение данных формы
Для обработки формы необходимо выполнить следующую последовательность действий:
Создать объект, поля которого будут содержать данные формы. В нашем случае создадим класс Student;
Передать пустой объект Student при переходе на страницу формы;
В полях формы настроить соответствие между полями формы и полями объекта класса Student;
После отсылки формы заполненный объект Student передается в теле HTTP-запроса с методом POST, после чего заполненный объект можно обработать, сохранить в базе данных и так далее.
Создадим класс Student
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". Передадим пустой объект студента
@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 для отправки данных формы).
<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". Данный метод будет обрабатывать результат заполнения формы.
@Controller
public class StudentController {
...
@PostMapping("/add_student")
public String greetingSubmit(@ModelAttribute Student student) {
return "redirect:/";
}
}
Изменим класс Student, превратив его в сущность
@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;
}
}
Создадим интерфейс репозитория
public interface StudentRepository extends JpaRepository<Student,Long> {}
Добавим класс сервиса для работы с DAO
@Service
public class StudentService {
private StudentRepository repository;
@Autowired
public void setRepository(StudentRepository repository) {
this.repository = repository;
}
public void saveStudent(Student student) {
repository.save(student);
}
}
Изменим класс контроллера. После получения результатов заполнения формы, данные будут сохраняться в базе данных.
@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:/";
}
}
Last updated
Was this helpful?