1 环境:
(1)spring 4.2.4 java8 tomcat 服务器
2 需要引入的jar包:
在保证spring-mvc环境正确的情况下,在进行数据验证的时候,需要引入的jar包为:
slf4j-api-1.7.25.jar slf4j-log4j12-1.6.6.jar log4j-1.2.17.jar log4j-core-2.3.jar hibernate-validator-4.3.1.Final.jar
validation-api-1.0.0.GA.jar
原因:引入slf4j相关的jar包是因为hibernate-validator-4.3.1.Final.jar对其有依赖 , log4j是日志依赖的jar包,hibernate-validator-4.3.1.Final.jar(验证框架)和validation-api-1.0.0.GA.jar(具体实现实体类效验)是实现验证的关键的jar包,是对JSR-303规范的实现。
可能出现的异常:以上jar包为必须的jar包,当然你也可以使用其它日志模块,在引入以上jar包的同时,可能也会出现一些异常,本人在引入上面的jar包的时候,会报org/jboss/jboss-logger/.........类找不到,此时需要引入jboss-logging-3.1.0.CR2.jar包
3 开始写代码
(1)书写Student类对象
public class Student {
/**
* 学生id
*/
private int id ;
/**
* 学生姓名
*/
@NotEmpty(message = "用户名不能为空")
@Size(min = 3,max = 20,message="用户名大小需在3到20个字符范围之内")
private String name ;
/**
* 学生年龄
*/
@Min(value=18,message = "年龄最小为18岁")
@Max(value=100,message = "年龄不得超过100岁")
private int age ;
public Student() {
super();
}
public Student(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
(2) 书写controller层代码:
@Controller
@RequestMapping("/initcontroller")
public class InitBinderController {
/**
* 验证对象
*/
private Validator validator ;
public InitBinderController() {
//实例化验证器工厂
ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
//生产验证器
validator = vf.getValidator();
}
/**
* 依赖的日志对象
*/
private Logger logger = Logger.getLogger(this.getClass());
/**
* 此方式的数据效验为局部效验,如若进行全局效验,需要在配置文件中配置全局效验
* @param db
*/
/*@InitBinder
public void initBinder(DataBinder db) {
db.replaceValidators(new StudentValidator());
logger.debug("在请求InitController时,先执行该initBinder方法");
}*/
@RequestMapping(path="login")
public String login(Model model) {
model.addAttribute(new Student());
//判断model中是否含有message属性
boolean containMessage = model.containsAttribute("message");
if(containMessage) {
logger.debug("model通过RedirectAttributes添加闪存属性message");
}
logger.debug("containMessage:" + containMessage);
return "studentindex";
}
@RequestMapping(path="initcontrollertest",method=RequestMethod.POST)
public String initControllerTest01(@Validated Student student ,BindingResult br,Model model,@RequestParam("age") String age,RedirectAttributes ra) {
logger.debug("age年龄为:" + age);
if(br.hasErrors()) {
//获取字段错误的数量
int nameFieldErrorCounts = br.getFieldErrorCount("name");
logger.debug("nameFieldErrorCounts:" + nameFieldErrorCounts);
//获取指定字段错误的信息
List<FieldError> fieldErrors = br.getFieldErrors("name");
FieldError fe = null ;
String error = "";
for(int i = 0 ; i < fieldErrors.size(); i++) {
//获取字段错误对象
fe = fieldErrors.get(i);
error = error + fe.getDefaultMessage();
}
//输出字段错误信息
logger.debug("通过使用闪存属性向重定向目标传递数据");
model.addAttribute("message", error);
logger.debug("验证出现了错误,返回到错误页面");
logger.debug("即将返回到登录页面");
return "studentindex";
}
logger.debug("进入了initControllerTest01处理器");
return "redirect:/initcontroller/home";
}
@RequestMapping("home")
public String home() {
logger.debug("链接到home.jsp页面");
return "home";
}
}
(3)书写jsp中的代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="com.tyus.bean.Student"%>
<!-- 引入spring mvc的标签库 -->
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>添加学生页面</title>
<script type="text/javascript" src="/springmvc04/staticresource/jquery.min.js"></script>
</head>
<body>
<!-- spring mvc表单标签 -->
<sf:form modelAttribute="student" method="POST" action="/springmvc04/initcontroller/initcontrollertest">
<sf:input path="name" type="text"/><span>${requestScope.message }</span>
<sf:input path="age" type="text"/><sf:errors path="age" cssStyle="color:red" delimiter=","></sf:errors>
<sf:button type="submit">提交</sf:button>
</sf:form>
</body>
</html>
(4) 回到页面中进行测试吧!!!!!