基于JSR-303规范的spring-mvc中的bean对象属性的验证

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) 回到页面中进行测试吧!!!!!


          

猜你喜欢

转载自blog.csdn.net/jialijuan521_zhang/article/details/80082895