概述:
主要对SpringMVC使用hibernate-validation框架(和hibernate没有任何关系)进行数据校验的一些解释和自己在学习过程中遇到的一些坑。。。使用这个校验框架的话,需要导入jar包(下载地址),如下:
校验思路
1.前端页面提交请求以及请求参数
2.服务器端接收到请求,通过DispatcherServlet控制器转发到Controller中交给相应的处理器进行处理。
3.在调用处理器进行处理之前使用validation进行数据校验。
4.如果校验出错,将错误信息回显到前端页面
校验步骤
1.配置校验器
<!-- 校验器,配置validator -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
<property name="validationMessageSource" ref="validationMessageSource"></property>
</bean>
<bean id="validationMessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!-- 指定校验信息的资源文件的基本文件名称,不包括后缀,后缀默认是properties -->
<property name="basenames">
<list>
<value>classpath:messageResource</value>
</list>
</property>
<!-- 指定文件的编码 -->
<property name="defaultEncoding" value="UTF-8"></property>
<property name="fileEncodings" >
<props>
<prop key="classpath:ValErrMsg">UTF-8</prop>
</props>
</property>
<!-- 对资源文件内容缓存的时间,单位秒 -->
<property name="cacheSeconds" value="120"></property>
</bean>
注意:
注意这里一定要指明是在 classpath 路径下,否则无效
在 properties 文件中定义错误信息:
格式为 : @Valid注解的属性的类首字母小写.类中添加了验证的属性.自定义的错误类型描述=错误信息
例如用 @Valid注解了 Employee employee ,并且在Employee类中为 lastName 和 email
分别添加了 @NotEmpty 和 @Email 注解。
那么 properties 文件中的 格式为:
employee.lastName.isNull=lastName不能为空值。
employee.email.error=电子邮件地址不合法。
然后要使用自定义的错误信息,还需要在 @NotEmpty 注解后面加上 message 属性
例如:@NotEmpty(message = “{employee.lastName.isNull}”)
employee.lastName.isNull=lastName不能为空值。
employee.gender.isNull=请输入您的性别。
employee.email.error=电子邮件地址不合法。
2.将校验器加载到处理器适配器中
<mvc:annotation-driven validator="validator"/>
3.在POJO中添加校验规则
/*
* 对要进行验证的属性添加对应的注解
* */
@NotEmpty(message = "{employee.lastName.isNull}")
private String lastName;
@Email(message = "{employee.email.error}")
private String email;
@NotEmpty(message = "{employee.gender.isNull}")
敲重点!!!
要想使用 <form:errors/> 标签在界面上对错误信息进行回显
一定要为要校验的参数添加 @ModelAttribute 注解并且指定value值与 form 表单中的
ModelAttribute 值一致。
否则错误信息无法显示到界面上
@ModelAttribute(“employee”)可以进行数据回显,也就是数据提交后,如果出现错误,将刚才提交的数据回显到刚才的提交页面。
@ModelAttribute(value = "employee") @Valid Employee employee
<form:form action="emp" method="post" modelAttribute="employee">