如何校验?
(1)使用JSR 303验证标准;
JSR 303是Java为Bean数据合法性校验提供的标准框架,已经包含在JavaEE6.0中,其通过在Bean属性上标注类似于@NotNull、@Max等标准的注解制定校验规则,并通过标准的验证接口对Bean进行验证。
常用注解:
@Null:被注释的元素必须为null
@NotNull:被注释的元素必须不为null
@AssertTrue:被注释的元素必须为true
@AssertFalse:被注释的元素必须为false
@Min(value):被注释的元素必须是个数字,值必须大于等于指定的最小值
@Max(value):被注释的元素必须是个数字,值必须小于等于指定的最大值
@DecimalMin(value):被注释的元素必须是个数字,值必须大于等于指定的最小值
@DecimalMax(value):被注释的元素必须是个数字,值必须小于等于指定的最大值
@Size(max, min):被注释的元素大小必须在制定范围内
@Digits(integer, fraction):被注释的元素必须是个数字,值必须在可接受的范围内
@Past:被注释的元素必须是一个过去的日期
@Future:被注释的元素必须是一个将来的日期
@Pattern(value):被注释的元素必须符合制定的表达式
(2)加入Hibernate Validator验证框架的jar包;
Hibernate Validator除支持所有标准的校验注解外,还支持以下扩展注解:
@Email:被注释的元素必须是电子邮箱地址
@Length:被注释的字符串的大小必须在指定的范围内
@NotEmpty:被注释的字符串必须非空
@Range:被注释的元素必须在合适的范围内
(3)在SringMVC配置文件中国添加<mvc: annotation-driven/>;
(4)在bean的属性上添加对应的注解;
(5)在目标方法bean类型的前面添加@Valid注解。
注意: 需验证的Bean对象和其绑定结果对象或错误对象是成对出现的,它们之间不允许声明其他的入参。如下:
public String handle(@Valid User user, BindingResult userBindingResult, String sessionId, ModelMap mm, @Valid Dept dept, Errors deptErrors){
...
}
验证出错转向哪个页面?
直接在方法中添加return即可。
return “input” //转向input页面
错误消息如何显示?如何将错误消息进行国际化?
- 显示:利用form:errors即可。
lastName:<form:input path="lastName"/>
<form:errors path="lastName"></form:errors>
- 定制国际化错误提示消息:
当一个属性校验失败后,校验框架会为该属性生成4个消息代码,这些代码以校验注解类名为前缀,结合modelAttribute、属性名及属性类型名生成多个对应的消息代码,例如User类中的password属性标注了@Pattern注解,当该属性值不满足@Pattern所定义的规则时,就会产生如下4个错误代码:
Pattern.user.password
Pattern.password
Pattern.java.lang.String
Pattern
(1)添加国际化配置文件I8n.properties:
NotEmpty.employee.lastName=^^lastName不能为空
Email.employee.email=Email地址不合法
Past.employee.birthday=Birthday不能为将来的一个时间
(2)配置国际化配置文件:
<!--配置国际化配置文件-->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="i18n"></property>
</bean>