springmvc注解开发-validation校验
2016-10-06 12:42
387 查看
使用注解的方式进行服务器端的数据校验。
Springmvc使用的是hibernate的校验框架validation(和hibernate没有任何关系)
1、校验思路:
页面提交请求的参数,请求到controller方法中,使用validation进行校验。如果校验出错,将错误信息展示到页面。
2、具体需求:
商品修改,添加校验(校验商品名称长度,生产日期非空校验),如果校验出错,在页面显示错误信息。
3、校验环境的搭建
Hibernate的校验框架所需要的jar包,下载地址:点击打开链接
4、配置校验器
在springmvc的配置文件中添加配置校验器:
5、将校验器注入处理器适配器
6、在pojo中添加校验规则
ValidGroup1.java
7、编写错误信息提示文件
CustomValidationMessages.properties
8 捕获错误校验信息
9 在页面显示校验错误信息
在controller方法中将错误信息传到页面
页面显示错误信息
项目结构
Springmvc使用的是hibernate的校验框架validation(和hibernate没有任何关系)
1、校验思路:
页面提交请求的参数,请求到controller方法中,使用validation进行校验。如果校验出错,将错误信息展示到页面。
2、具体需求:
商品修改,添加校验(校验商品名称长度,生产日期非空校验),如果校验出错,在页面显示错误信息。
3、校验环境的搭建
Hibernate的校验框架所需要的jar包,下载地址:点击打开链接
4、配置校验器
在springmvc的配置文件中添加配置校验器:
<!-- 配置校验器 --> <!-- org.springframework.validation.beanvalidation.LocalValidatorFactoryBean为spring提供的一个校验接口,在这里面 除了可以指定hibernate的校验器之外,还可以指定其他的校验器;--> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <!-- 使用hibernate提供的org.hibernate.validator.HibernateValidator校验器 --> <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/> <!-- 指定校验使用的资源文件,在文件中配置校验错误信息,如果不指定则默认使用classpath下的VAlidationMessages.properties --> <property name="validationMessageSource" ref="messageSource"/> </bean> <!-- 校验错误信息配置文件 --> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <!-- 资源文件名 为CustomValidationMessages.properties,因为这个歌basename,所以,配置文件中,不需要写后缀properties--> <property name="basenames"> <list> <value>classpath:CustomValidationMessages</value> </list> </property> <!-- 资源文件编码格式 --> <property name="fileEncodings" value="utf-8"/> <!-- 对资源文件内容缓存时间,单位秒 --> <property name="cacheSeconds" value="120"/> </bean>
5、将校验器注入处理器适配器
<!-- validator=validator:在处理器适配器中注入校验器 方式一 --> <mvc:annotation-driven conversion-service="conversionService" validator="validator"> </mvc:annotation-driven>
<!-- 将校验器注入到适配器中方式二 --> <!-- 自定义webBinder --> <bean id="customBinder" class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"> <property name="validator" ref="validator"/> </bean> <!-- 注解到适配器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="webBindingInitializer" ref="customBinder"></property> </bean>
6、在pojo中添加校验规则
package com.sky.ssm.po; import java.util.Date; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import com.sky.ssm.controller.validation.ValidGroup1; public class Items { private Integer id; //校验名称长度在1~30之间, //message为 错误提示信息,{items.name.length.error}表示取配置文件中的信息 //groups:将此校验划分至那个分组,groups可以定义多个分组 <span style="background-color: rgb(255, 255, 102);"> @Size(min=1,max=30,message="{items.name.length.error}",groups={ValidGroup1.class})</span> private String name; private Double price; private String pic; //非空校验 <span style="background-color: rgb(255, 255, 102);"> @NotNull(message="{items.createtime.isNull}")</span> private Date createtime; <span style="white-space:pre"> </span>//省略.... }在pojo中添加校验规则时,可以为其添加校验分组,groups,当不同的controller方法对一个pojo进行校验又需要不同的校验规则时,可以使用分组校验。
ValidGroup1.java
package com.sky.ssm.controller.validation; /** * 校验分组 * @author sk * 此分组只校验商品名称的长度 */ public interface ValidGroup1 { //接口中不需要定义任何方法,仅是对不同的校验规则进行分组 }
7、编写错误信息提示文件
CustomValidationMessages.properties
#添加校验错误提示信息 items.name.length.error = 请输入1到30个字符的商品名称 items.createtime.isNull = 请输入商品的生产日期
8 捕获错误校验信息
<span style="background-color: rgb(255, 255, 102);">//在需要校验的pojo前面添加@Validated,在需要校验的pojo后边添加BindingResult bindingResult接收校验出错信息 //注意:@Validated和BindingResult是配对出现的,并且在形参里面的顺序是固定的(一前一后) //value={ValidGroup1.class}:指定使用ValidGroup1分组的校验</span> @RequestMapping("/editItemsSubmit") public String editItemsSubmit(Model model,HttpServletRequest request,Integer id,String name, <span style="background-color: rgb(255, 255, 102);">@Validated(value={ValidGroup1.class}) ItemsCustom itemsCustom,BindingResult bindingResult</span>) throws Exception{ <span style="background-color: rgb(255, 255, 51);">//获取校验错误信息 if(bindingResult.hasErrors()){//如果有错误 //输出错误信息 List<ObjectError> allErrors = bindingResult.getAllErrors(); for (ObjectError objectError : allErrors) { //输出错误信息 System.out.println(objectError.getDefaultMessage()); } //将错误信息传到页面 model.addAttribute("allErrors", allErrors); //出错后重新回到商品的修改页面 return "items/editItems";<span style="color:#ffff66;"> }</span></span> //调用service更新商品信息,页面需要将商品新传到此方法 itemsService.updateItems(id, itemsCustom); //重定向到商品的查询列表 return "redirect:queryItems.action"; }
9 在页面显示校验错误信息
在controller方法中将错误信息传到页面
页面显示错误信息
<!-- 显示错误信息 --> <c:if test="${allErrors != null}"> <c:forEach items="${allErrors }" var="error"> ${error.defaultMessage }</br> </c:forEach> </c:if>
项目结构
相关文章推荐
- 【SpringMVC注解开发】validation校验-商品修改校验 ---SpringMVC学习笔记(六)
- 【SpringMVC注解开发】validation校验-分组校验---SpringMVC学习笔记(七)
- springmvc注解开发-validation校验-分组校验
- springmvc注解开发-validation校验-商品修改校验
- springmvc(十七)springmvc注解开发-validation校验-商品修改校验
- springmvc注解开发-高级之数据回显
- springmvc学习笔记(11)-springmvc注解开发之简单参数绑定
- Java 自定义注解实现springMVC 参数校验非空判断,为空 则返回响应为空信息
- SpringMVC(四)注解开发
- 使用注解方式开发SpringMVC
- SpringMvc——进行注解开发的基本配置
- SpringMVC验证框架Validation自定义注解实现传递参数到国际化资源文件
- 【SpringMVC注解开发】拦截器---拦截器的定义和配置学习笔记十一
- SpringMVC学习(2):注解(annotation)开发及form表单数据封装
- springmvc学习笔记(12)-springmvc注解开发之包装类型参数绑定
- springmvc注解开发——Springmvc总结(二)
- springmvc系列03 注解开发
- SSM整合之springmvc注解开发
- springmvc(十三)springmvc注解开发-springmvc参数绑定-包装类型pojo参数绑定
- SpringMVC注解开发