天天看点

SpringMVC----数据校验(22)

1.使用JSR303标准

      1.1  JSR 303 是 Java 为 Bean 数据合法性校验提供的标准框架,它已经包含在 JavaEE 6.0 中 .

      1.2  JSR 303 通过在 Bean 属性上标注类似于 @NotNull、@Max等标准的注解指定校验规则,

              并通过标准的验证接口对 Bean进行验证

SpringMVC----数据校验(22)

   2.应为JSR303只是一个标准,所以如果想使用这套标准进行验证,需要有一个实现该标准的产品。

    Hibernate Validator验证框架

      2.1 Hibernate Validator 是 JSR 303 的一个参考实现,除支持所有标准的校验注解外,它还支持以下的扩展注解

SpringMVC----数据校验(22)

      2.2 加入hibernate-validator的jar包

  3. 在spring.xml配置文件中添加  <mvc:annotation-driven></mvc:annotation-driven>

  4. 在需要验证的属性上添加对应的直接。

@NotEmpty  //不能为空
private String lastName;
@Email     //邮件
private String email;
@Past     //不能是过去的时间
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date birth;
           

      5.在目标方法bean类型的前面添加 @Valid 注解(注意解决jar包的冲突)。其中,由于配置了

         <mvc:annotation-driven></mvc:annotation-driven>会按照注解自动完成数据类型的转换和格式化,如果中间

        出现转换的错误,会自动将错误信息加入到 BindingResult该参数中,可以通过添加BindingResult参数,获取错误

         信息。

@RequestMapping(value="/emp",method=RequestMethod.POST)
public String save(@Valid Employee employee,BindingResult result){
	System.out.println(employee);
	if (result.getErrorCount() > 0) {
		for (FieldError error : result.getFieldErrors()) {
			System.out.println(error.getField() + ":"
					+ error.getDefaultMessage());
		}
	}
	employeeDao.save(employee);
	return "redirect:/emps";
}
           

  6. 如果验证出错,跳转到指定的页面。(返回到原来的填写页面,会自动回显内容,但是下拉列表框的内容需要放入map

        传到前台。)

@RequestMapping(value="/emp",method=RequestMethod.POST)
public String save(@Valid Employee employee,BindingResult result,Map<String,Object> map){
	       System.out.println(employee);
	if (result.getErrorCount() > 0) {
	 for (FieldError error : result.getFieldErrors()) {
		System.out.println(error.getField() + ":"+ error.getDefaultMessage());
	 }
	map.put("departments", departmentDao.getDepartments());
	 return "input";
	 }
	employeeDao.save(employee);
	return "redirect:/emps";
}
           

继续阅读