1.使用JSR303标准
1.1 JSR 303 是 Java 为 Bean 数据合法性校验提供的标准框架,它已经包含在 JavaEE 6.0 中 .
1.2 JSR 303 通过在 Bean 属性上标注类似于 @NotNull、@Max等标准的注解指定校验规则,
并通过标准的验证接口对 Bean进行验证

2.应为JSR303只是一个标准,所以如果想使用这套标准进行验证,需要有一个实现该标准的产品。
Hibernate Validator验证框架
2.1 Hibernate Validator 是 JSR 303 的一个参考实现,除支持所有标准的校验注解外,它还支持以下的扩展注解
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";
}