需要的jar: hibernate-validator-4.3.0.Final.jar jboss-logging-3.2.1.Final.jar validation-api-1.0.0.GA.jar
要校验的实体:
import javax.validation.constraints.Max; import javax.validation.constraints.NotNull; import org.hibernate.validator.constraints.Length; public class User { @NotNull(message="名字不能为空") @Length(min = 6,max=12,message="用户名要在六位以上") private String userName; @Max(value=120,message="年龄最大不能查过120") private int age; // @Email(message="邮箱格式错误") // private String email; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } // public String getEmail() { // return email; // } // public void setEmail(String email) { // this.email = email; // } } 这个需要校验的实体用注解对字段校验方式进行标注处理页面请求的Controller:
@Controller @RequestMapping(value = "/user") public class UserController { @RequestMapping("/login") public String login(@Valid User user, BindingResult result, Model model,HttpServletRequest request) { //需要添加,否则spring的form标签会处理会失败,报错 model.addAttribute(user); if (result.hasFieldErrors()) { return "user/login"; } return "/"; } } 控制器中,要用@Valid标记要校验的实体,并且紧跟着的参数是BindingResult result,这样在处理业务之前,会先校验user这个实体里面的字段是否合法,如果不合法,会将在User这个bean中的提示消息返回给jsp页面中(但是这个需要spring form标签的支持,一旦用了spring from 的标签作为表单支持的时候,对应的Controller 的方法中一定要给model或者modelMap中返回设置一个被校验对象的值,否则会报错,具体下面会有介绍)jsp页面:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri = "http://www.springframework.org/tags/form" prefix="sf" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'login.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <style type="text/css"> .error{ color:red; } </style> </head> <body> 登录页面<br> <sf:form method="POST" modelAttribute="user"> userName : <sf:input path="userName"/> <sf:errors path="userName" cssClass="error"/><br> age : <sf:input path="age"/> <sf:errors path="age" cssClass="error"/><br> <input type="submit" value="提交"> </sf:form> </body> </html> jsp页面中必须要引入 <%@ taglib uri = "http://www.springframework.org/tags/form" prefix="sf" %> 这个是 spring form 的标签库 然后在页面中使用 spring form 标签库支持的标签书写form表单,在每一个input字段的后面,书写<sf:errors path="age" cssClass="error"/><br>,这个errors的path字段要与对应的input标签的path值对应,才能在渲染页面的时候正常渲染注入。效果图: