Bài toán
Trong phần này chúng ta sẽ phát triển Chức năng cho phép nhập vào thông
tin người dùng và hiển thị các thông báo tương ứng với giá trị của các trường dữ
liệu.
Yêu cầu đối với dữ liệu người dùng bao gồm:
• Tên bắt buộc, có độ dài tối thiểu là 2 ký tự, tối đa
là 30 ký tự
• Tuổi bắt buộc, có giá trị nhỏ nhất là 18
Hướng dẫn
Bước 1: Tạo project
Gradle với tên spring-validation
Bước 2: Thêm springframeword
và validation dependencies trong file build.grade
//
https://mvnrepository.com/artifact/org.springframework/spring-webmvc
compile group: 'org.springframework', name: 'spring-webmvc', version: '5.1.7.RELEASE'
providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.0'
//
https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf-spring5
compile group: 'org.thymeleaf', name: 'thymeleaf-spring5', version: '3.0.9.RELEASE'
// https://mvnrepository.com/artifact/org.hibernate/hibernate-validator
compile group: 'org.hibernate', name: 'hibernate-validator', version: '6.1.0.Final'
//
https://mvnrepository.com/artifact/javax.validation/validation-api
compile group: 'javax.validation', name: 'validation-api', version: '2.0.1.Final'
Bước 3:Tạo cấu trúc thư mục
trong thư mục src/main như sau
Bước 4: Cấu hình ứng dụng
Bước 5: Tạo class User trong
thư mục model như sau:
@NotEmpty: không để trống
@Size(min = 2, max = 30): độ dài từ 2 đến 30
@Min(18): Giá trị nhỏ nhất là 18
package com.codelean.model;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class User {
@NotNull
@Size(min=2, max=30)
private String name;
@NotNull
@Min(18)
private Integer age;
public String
getName() {
return this.name;
}
public void setName(String
name) {
this.name = name;
}
public Integer
getAge() {
return age;
}
public void setAge(Integer
age) {
this.age = age;
}
public String
toString() {
return "Person(Name:
" + this.name + ",
Age: " + this.age + ")";
}
}
Bước 6: Tạo controller UserController
Thêm @Validated @ModelAttribute("user") User user để xác thực
Model User
Thêm
BindingResult bindingResult giữ kết quả xác nhận và ràng buộc User có xảy
ra lỗi không.
package com.codelean.controller;
import com.codelean.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
@Controller("/")
public class UserController {
@GetMapping("/user-validate")
public String
showForm(Model model){
model.addAttribute("user", new User());
return "uservalidate";
}
@PostMapping("/user-validate")
public String
checkValidation (@Validated @ModelAttribute("user") User
user, BindingResult bindingResult){
if (bindingResult.hasFieldErrors()){
return "uservalidate";
}
return "result";
}
}
Bước 7: Trong thư mục views tạo
file uservalidate.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>User
Validation</title>
</head>
<body>
<form th:object="${user}" method="post">
<table>
<tr>
<td>Name:</td>
<td><input th:field="*{name}"></td>
<td th:if="${#fields.hasErrors('name')}"
th:errors="*{name}">Name
Error</td>
</tr>
<tr>
<td>Age:</td>
<td><input th:field="*{age}"></td>
<td th:if="${#fields.hasErrors('age')}"
th:errors="*{age}">Age Error</td>
</tr>
<tr>
<td>
<button type="submit">Submit</button>
</td>
</tr>
</table>
</form>
</body>
</html>
Bước 8: Trong thư mục views tạo
file result.html
<html>
<head>
<title>Congratulations</title>
</head>
<body>
<h1>Congratulations! You are old enough to sign up for
this site.</h1>
</body>
</html>
Bước 9: Cấu hình chạy ứng dụng
Cấu hình Artifact: Web Application: Exploded
Cấu hình Tomcat
Bước 10: Chạy ứng dụng ta được
views như sau
Nhập dữ liệu sai validate ta có thông báo
Nhập dữ liệu đúng ta đi tới trang result
إرسال تعليق