属性校验是在用户输入一些数据后针对这些数据有无错误进行检测。
加入下边3个包
hibernate-validator-6.0.9.Final.jar
validation-api-2.0.1.Final.jar
jboss-logging-3.3.2.Final.jar
然后在springmvc.xml配置文件里加入校验器
<!-- 开启注解配置 扫描com.samrtian.action包下的所有类-->
<mvc:annotation-driven validator="validator">
</mvc:annotation-driven>
<context:component-scan base-package="com.samrtian.action"/>
<!-- 校验器 -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
<!-- 错误信息提示的配置引用-->
<property name="validationMessageSource" ref="messageSource"/>
</bean>
<!-- 错误信息提示的配置文件 -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:CustomValidationMessages</value>
</list>
</property>
<property name="fileEncodings" value="utf-8"/>
<property name="cacheSeconds" value="120"/>
</bean>
接着在需要校验的属性字段上加入注解
public class TUser {
private Integer id;
//user.name.length.error是在CustomValidationMessages.properties配置文件里定义的key=value
@Size(min=6, max=30, message="{user.name.length.error}")
private String name;
@NotNull(message="user.password.length.error")
private String password;
接下来在控制器里对需要校验的字段加注解
@RequestMapping("/login.do")
public String login(Model model, @Validated TUser user, BindingResult bindingResult) throws Exception {
// TODO Auto-generated method stub
@Validated BingdingResult是配对使用的一前一后
if (bindingResult.hasErrors()) {
List<ObjectError> allError = bindingResult.getAllErrors();
for (ObjectError objectError : allError) {
System.out.println(objectError.getDefaultMessage());
}
model.addAttribute("error", allError);
return "forward:index.jsp";
}
return "LoginSuccess";
}
前台页面接收error参数显示即可