Validation trong Spring MVC và Hibernate
Đăng lúc: 11:05 AM - 31/10/2023 bởi Charles Chung - 1526Validation là một trong những yếu tố phổ biến nhất của ứng dụng web để xác nhận dữ liệu từ người dùng. Bất cứ khi nào người dùng gửi dữ liệu vào hệ thống của bạn, thì dữ liệu đó phải hợp lệ. Trong bài viết này tôi sẽ hướng dẫn các bạn sử dụng validation dữ liệu trên form trong Spring MVC và Hibernate.
1. Kiến thức cần có
- Lập trình Java Core
- HTML - CSS - JavaScript
- JSP và Servlet
2. Các bước tạo ứng dụng Spring MVC và thực hiện validation dữ liệu trên Form.
Bước 1: Tạo Dynamic Web Project (xem chi tiết ở bài trước nhé)
- Khởi động Eclispe IDE -> vào menu File -> New -> Dynamic Web Project -> Đặt tên "SpringWebMVCHibernateValidator"
- Tiếp tục kích vào Next -> Next -> Chọn Generate web.xml deyployment desciptor -> kích finish
Bước 2: Convert sang Maven Project
- Kích chuột phải vào Project vừa tạo -> Configure -> Convert to Maven Project -> Finish
Bước 3: Khai báo các Maven Dependencies cần thiết
- Mở file pom.xml và cấu hình các Maven Dependencies gồm: spring web, web mvc, servlet api, jstl, validation api, hibernate validator
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<!--https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.18</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.18</version>
</dependency>
<!--
https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.5.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
</dependencies>
Bước 4: Cấu hình ứng dụng Spring Web Mvc
- Trong thư mục WEB-INF tạo thư mục views và tệp tin spring-servlet.xml như hình dưới
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- chỉ ra các package chứa các lớp java được đăng ký như là các bean -->
<context:component-scan
base-package="controllers,dao" />
<!-- chỉ tìm kiếm các bean trong cùng context application mà nó được định nghĩa -->
<context:annotation-config />
<!-- mặc định các basic components được ủy quyền gửi request tới các controller -->
<mvc:annotation-driven />
<!-- cấu hình bean xác định view sẽ được sinh ra (thư mục chứa các view, đuôi tệp tin view) -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/views/" p:suffix=".jsp" />
</beans>
- Mở tệp web.xml và cấu hình vào bên trong thẻ <web-app> như sau:
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Bước 5: Tạo các tệp tin theo cấu trúc mô tả sau
- Tạo gói entities với lớp Student
package entities;
import java.util.Date;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import javax.validation.constraints.Pattern;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;
import org.springframework.format.annotation.DateTimeFormat;
public class Student {
@Length(min = 3,max = 6,message = "Độ dài của mã từ 3-6 ký tự")
@NotEmpty(message = "Mã sinh viên không được trống")
private String studentId;
@Length(min = 6,max = 50,message = "Độ dài của mã từ 6-50 ký tự")
@NotEmpty(message = "Tên sinh viên không được trống")
private String fullName;
@NotNull(message = "Hãy nhập tuổi")
@Range(min = 18,max=60,message = "Tuổi tối thiểu là 18, tối đa là 60")
private int age;
@NotNull(message = "Hãy nhập ngày sinh")
@DateTimeFormat(pattern="dd/MM/yyyy")
@Past(message = "Ngày phải trước ngày hiện tại")
private Date birthDay;
@Email(message = "Nhập đúng định dạng email")
@NotEmpty(message = "Hãy nhập email")
private String email;
@Pattern(regexp = "^\\d{8,10}$",message = "Số điện thoại từ 8-10 số")
@NotEmpty(message = "Hãy điện thoại")
private String phone;
@NotNull(message = "Hãy nhập giới tính")
private Gender gender;
private enum Gender
{
Male,
Female
}
public Student() {
// TODO Auto-generated constructor stub
}
public String getStudentId() {
return studentId;
}
public void setStudentId(String studentId) {
this.studentId = studentId;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthDay() {
return birthDay;
}
public void setBirthDay(Date birthDay) {
this.birthDay = birthDay;
}
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 Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
}
- Tạo gọi controllers với lớp StudentController
package controllers;
import java.util.ArrayList;
import java.util.List;
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.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import entities.Student;
@Controller
public class StudentController {
public static List<Student> students=new ArrayList<>();
@RequestMapping("/")
public String index(Model model) {
model.addAttribute("students",students);
return "index";
}
@RequestMapping("/addStudent")
public String add(Model model) {
model.addAttribute("student",new Student());
return "addStudent";
}
@RequestMapping(value="/saveStudent",method = RequestMethod.POST)
public String save(@Valid @ModelAttribute("student") Student st, BindingResult result, Model model) {
if(result.hasErrors()) {
model.addAttribute("student",st);
return "addStudent";
}else
{
students.add(st);
return "redirect:/";
}
}
}
- Tạo thư mục views trong WEB-INF với các tệp index.jsp, addStudent.jsp
- Tệp index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>DANH SÁCH SINH VIÊN</title>
</head>
<body>
<h1>Danh sách sinh viên</h1>
<a href="addStudent">Thêm mới</a>
<table border="1">
<tr>
<th>Mã số</th>
<th>Tên</th>
<th>Tuổi</th>
<th>Ngày sinh</th>
<th>Email</th>
<th>Giới tính</th>
<th>Điện thoại</th>
</tr>
<c:forEach var="s" items="${students}">
<tr>
<td>${s.studentId}</td>
<td>${s.fullName}</td>
<td>${s.age}</td>
<td>${s.birthDay}</td>
<td>${s.email}</td>
<td>${s.gender}</td>
<td>${s.phone}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
- Tệp addStudent.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="f" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Thêm mới sinh viên</title>
</head>
<style>
.error{color:red;}
</style>
<body>
<h1>Thêm mới sinh viên</h1>
<f:form action="saveStudent" method="post" modelAttribute="student">
<table>
<tr>
<td>Mã số</td>
<td><f:input path="studentId"/><td>
<td><f:errors cssClass="error" path="studentId"></f:errors>
</tr>
<tr>
<td>Họ tên</td>
<td><f:input path="fullName"/><td>
<td><f:errors cssClass="error" path="fullName"></f:errors>
</tr>
<tr>
<td>Tuổi</td>
<td><f:input path="age"/><td>
<td><f:errors cssClass="error" path="age"></f:errors>
</tr>
<tr>
<td>Ngày sinh</td>
<td><f:input path="birthDay"/><td>
<td><f:errors cssClass="error" path="birthDay"></f:errors>
</tr>
<tr>
<td>Giới tính</td>
<td><f:select path="gender">
<f:option value="">Chọn giới tính</f:option>
<f:option value="Male">Male</f:option>
<f:option value="Female">Female</f:option>
</f:select><td>
<td><f:errors cssClass="error" path="gender"></f:errors>
</tr>
<tr>
<td>Email</td>
<td><f:input path="email"/><td>
<td><f:errors cssClass="error" path="email"></f:errors>
</tr>
<tr>
<td>Điện thoại</td>
<td><f:input path="phone"/><td>
<td><f:errors cssClass="error" path="phone"></f:errors>
</tr>
<tr>
<td colspan="3"><button>Lưu</button></td>
</tr>
</table>
</f:form>
</body>
</html>
Bước 6: Run application
- Kích chuột phải vào project chọn Run As -> Run on Server -> Tomcat v9.0
Kích để tải source code bài Validation trong Spring MVC và Hibernate
Training online liên hệ: Charles Chung
Video
thay lời cảm ơn!
Các bài cũ hơn
- Tổng hợp các bài tập lập trình Java core in ra hình tam giác là ngôi sao hoặc số (có lời giải) (09:25 PM - 28/10/2023)
- CRUD trong ứng dụng Spring Web MVC với Hibernate-SQL Server Database (10:44 PM - 27/10/2023)
- Hibernate One to Many Mapping trong Spring Web MVC và cơ sở dữ liệu Oracle (08:01 PM - 26/10/2023)
- CRUD trong ứng dụng Spring Web MVC với Hibernate-Oracle Database (11:02 AM - 25/10/2023)
- Các cách gửi nhận dữ liệu trong Spring MVC (11:27 AM - 24/10/2023)