springmvc之如何对表单数据进行校验
1、spring4.0拥有自己独立的数据校验框架,同时还支持JSR303标准。
2、spring在进行数据绑定时,可同时调用校验框架完成数据校验工作。在springmvc中,可直接通过注解驱动的方式进行数据校验。
3、spring的LocalValidatorFactoryBean既实现了spring的Validator接口,也实现了JSR303的Validator接口,只要在spring容器中定义一个LocalValidatorFactoryBean,即可将其注入到需要的数据校验Bean中。
4、spring本身并没有提供JSR303的实现,所以必须将JSR所需的包放到类路径下。
5、<mvc:annotation-driven>会默认装配好一个LocalValidatorFactoryBean,通过在处理方法的入参上标注@Valid注解即可让springmvc在完成数据绑定后执行数据校验的工作。
6、在已经标注了JSR303注解的表单/命令对象前标注一个@Valid。springmvc框架在将请求参数绑定到入参对象后,就会调用校验框架根据注解声明的校验规则实施校验。
7、springmvc通过对处理方法签名的约束来保存校验结果:前一个表单/命令对象的校验结果保存到随后的入参中,这个保存校验结果的入参必须是BindingResult或Errors类型,这两个类都位于org.springframework.validation包中。
8、需校验的bean对象和其绑定结果对象或错误对象是成对出现的,它们之间不允许声明其它的入参。
9、Errors接口提供了获取错误信息的方法,如getErrorCount()或getFieldErrors(String field)。
10、BindingResult扩赞了Errors接口。
加入以下包:
在spingmvc.xml文件中配置:
<mvc:annotation-driven></mvc:annotation-driven>
然后就可以为需要的字段加上验证:
@NotEmpty private String lastName; @Email private String email;
如果发生el包的异常,我们要删除tomcat的lib文件夹下的el.api.jar,
同时加入相匹配的包:
el.api-2.2.jar
javax.el-2.2.4.jar
javax.el-api-2.2.4.jar
在Handler中我们就可以这么使用:
@RequestMapping(value="/emp",method=RequestMethod.POST) public String save(@Valid Employee employee, BindingResult result, Map<String,Object> map) { System.out.println("save-->"+employee); if (result.getErrorCount()>0) { System.out.println("出错了"); for(FieldError error:result.getFieldErrors()) { System.out.println(error.getField()+":"+error.getDefaultMessage()); } map.put("departments", departmentDao.getDepartments()); return "add"; } employeeDao.save(employee); return "redirect:/emps"; }
用BindingResult来接收验证信息,并进行在控制台中打印错误信息,然后跳转到本修改界面。