本文有两点须要注意:html
首先添加须要用到hibrenate的validation JAR包
百度云下载地址 连接:http://pan.baidu.com/s/1pJusKEv 密码:k6u9java
用到的一个测试POJO类Bookspring
package com.elin4it.ssm.pojo; import org.hibernate.validator.constraints.NotEmpty; import sun.security.util.Length; import javax.validation.constraints.Size; /** * Description: Book * Author: Elin Zhou * Create: 2015-07-03 21:43 */ public class Book { private String name; private String isbn; public String getIsbn() { return isbn; } public void setIsbn(String isbn) { this.isbn = isbn; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Book{" + "isbn='" + isbn + '\'' + ", name='" + name + '\'' + '}'; } }
两个jsp页面,一个用来显示form,一个是成功后的显示界面缓存
addBook.jspmarkdown
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%-- Created by IntelliJ IDEA. User: elin Date: 15-7-3 Time: 下午3:11 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title></title> </head> <body> <form action="<%=request.getContextPath()%>/book/addBookHandle" method="post"> 书名:<input type="text" name="name"><br> ISBN:<input type="text" name="isbn"><br> <input type="submit" value="提交"><br> </form> </body> </html>
success.jspmvc
<%-- Created by IntelliJ IDEA. User: elin Date: 15-7-3 Time: 下午9:08 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title></title> </head> <body> <h1>SUCCESS</h1> </body> </html>
<!--validation--> <bean id="validatorFactory" 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> <!--验证提示信息配置文件,不须要些.properties--> <value>classpath:com/elin4it/ssm/config/validationMessage</value> </list> </property> <!--默认编码--> <property name="defaultEncoding" value="utf-8"/> <!--缓存时间--> <property name="cacheSeconds" value="120"/> </bean>
而后须要在annotation-driven配置beanapp
<mvc:annotation-driven validator="validatorFactory"></mvc:annotation-driven>
book.name.notEmpty=书名不能为空 book.isbn.size.error=ISBN必须为13位
@NotEmpty(message = "{book.name.notEmpty}") private String name; @Size(min = 13,max = 13,message = "{book.isbn.size.error}") private String isbn;
其中message中是在以前的提示信息文件中的定义的键名jsp
controller验证方法代码以下ide
@RequestMapping("/addBookHandle") public ModelAndView addBookHandel(@Validated Book book,BindingResult bindingResult){ ModelAndView modelAndView = new ModelAndView(); if (bindingResult.hasErrors()){ //获得全部的错误 List<ObjectError> errors = bindingResult.getAllErrors(); for (ObjectError objectError:errors){ //打印错误信息 System.out.println(objectError.getDefaultMessage()); } modelAndView.addObject(book); //若是产生错误则跳转的原页面 modelAndView.setViewName("book/addBook"); }else{ modelAndView.setViewName("success"); } return modelAndView; }
有时候,要验证的属性不是一成不变的,有时候只须要验证书名,有时候只须要验证ISBN,因此须要对验证规则进行分组。
根据要分的组数,定义几个java类,不须要继承类或实现接口,类中也不须要任何内容
好比如今建立ValidateType1和ValidateType2
而后在POJO类中定义规则的时候定义其group属性,例如post
@NotEmpty(message = "{book.name.notEmpty}",groups = ValidationType1.class) private String name; @Size(min = 13,max = 13,message = "{book.isbn.size.error}",groups = ValidationType2.class) private String isbn;
而后在对应的controller方法的@Validated注解中添加须要执行的验证规则,如
public ModelAndView addUserHandle(@Validated(ValidationType1.class) User user,BindingResult bindingResult)
那么在这个方法中,只会对书名进行验证了。