使用JSR-303
验证,同时错误信息从资源文件中读取。
添加Hibernate-validator
依赖
<!-- SpringMVC 检验框架包 -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.2.Final</version>
</dependency>
SpringMVC.xml
配置校验器
<!-- Hibernate Validator校验 -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<!-- 使用HibernateValidator校验器 -->
<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:ValidationMessage
</value>
</list>
</property>
<!-- 资源文件的编码格式 -->
<property name="fileEncodings" value="utf-8"/>
<!-- 对资源文件的内容缓存的时间 -->
<property name="cacheSeconds" value="60"/>
</bean>
同时需要有资源文件ValidationMessage
,需要注意的是在idea
中,上面的classpath:ValidationMessage
会显示红色,可以无视它。
firstName.size = First name must be between {min} and {max}
lastName.size = Last name must be between {min} and {max}
username.size = username must be between {min} and {max}
password.size = username must be between {min} and {max}
email.valid = The email address must be valid
然后SpringMVC.xml
添加
<mvc:annotation-driven conversion-service="mvcConversionService" validator="validator"/>
XML
配置部分完成。
添加pojo
public class Spitter {
private Long id;
@NotNull
@Size(min = 5, max = 16, message = "{username.size}")
private String username;
@NotNull
@Size(min = 5, max = 16, message = "{password.size}")
private String password;
@NotNull
@Size(min = 5, max = 16, message = "{firstName.size}")
private String firstName;
@NotNull
@Size(min = 5, max = 16, message = "{lastName.size}")
private String lastName;
@NotNull
@Email(message = "{email.valid}")
private String email;
...
}
@NotNull
表示修饰的属性内容不能为空@Size(min = 5, max = 16, message = "{username.size}")
表示修饰的属性的字符内容长度在5~16之间;message
表示如果不合法,输出的错误信息.
jsp
页面表单
<%--使用Spring表单绑定标签--%>
<sf:form method="POST" commandName="spitter">
<sf:label path="firstName" cssErrorClass="error">First Name</sf:label>
<sf:input path="firstName" cssErrorClass="error"/>
<sf:errors path="firstName" cssClass="error"/><br/>
<sf:label path="lastName" cssErrorClass="error">Last Name</sf:label>
<sf:input path="lastName" cssErrorClass="error"/>
<sf:errors path="lastName" cssClass="error"/><br/>
<sf:label path="email" cssErrorClass="error">Email</sf:label>
<sf:input path="email" type="email" cssErrorClass="error"/>
<sf:errors path="email" cssClass="error"/> <br/>
<sf:label path="username" cssErrorClass="error">Username</sf:label>
<sf:input path="username" cssErrorClass="error"/>
<sf:errors path="username" cssClass="error"/> <br/>
<sf:label path="password" cssErrorClass="error">Password</sf:label>
<sf:input path="password" type="password" cssErrorClass="error"/>
<sf:errors path="password" cssClass="error"/> <br/>
<input type="submit" value="Register">
<!-- *通配符表示处理所有的error,默认显示的错误使用<span>标签,element这里使用<div>标签 -->
<%--<sf:errors path="*" cssClass="error" element="div"/>--%>
</sf:form>
控制器
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String showRegistrationForm(Model model) {
model.addAttribute(new Spitter());
return "registerForm";
}
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String processRegistration(
@Valid Spitter spitter,
Errors errors) {
if(errors.hasErrors()) {
return "registerForm";
}
return "redirect:/spitter/" + spitter.getUsername();
}
发生错误时的显示的效果
可以看到发生错误的时候显示的是资源文件内定义的内容。