文档章节

springMVC 高级2 之 valadation

龙之天空
 龙之天空
发布于 2015/11/16 13:17
字数 735
阅读 319
收藏 2

精选30+云产品,助力企业轻松上云!>>>

1 validation

    Spring3支持JSR-303验证框架,JSR-303 JAVA EE 6 中的一范,叫做Bean Validation,官方参考实现Hibernate Validator(与Hibernate ORM 没有关系),JSR 303 用于Java Bean 中的字段的值进验证

1.1 配置validator

<!-- 验错误信息配置文件 -->

       <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>

       <bean id="validator"

              class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">

              <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />

              <!-- 如果不指定使用classpath下的ValidationMessages.properties -->

              <property name="validationMessageSource" ref="messageSource" />

       </bean>

 

 

<mvc:annotation-driven validator="validator"> </mvc:annotation-driven>

 

1.2 添加验证规则

public class Items {

    private Integer id;

    @Size (min=1,max=30,message="{item.name.length.illigel}")

    private String name;

   

    @NotEmpty(message="{pic.is.null}")

    private String pic;

 

1.3 错误消息文件 CustomValidationMessages

item.name.length.illigel=商品在名称在13个字符之

pic.is.null=传图

 

1.4 捕获错误

public String editItemSubmit(@Validated @ModelAttribute("item") Items items,BindingResult result,

                     @RequestParam("pictureFile") MultipartFile[] pictureFile,Model model)

                     throws Exception {

       //如果存在校验错误则转到商品修改

              if (result.hasErrors()) {

                     List<ObjectError> errors = result.getAllErrors();

                     for(ObjectError objectError:errors){

                            System.out.println(objectError.getCode());

                            System.out.println(objectError.getDefaultMessage());

                     }

                     return "item/editItem";

              }

 

 

注意:添加@Validated表示在items参数时进行校,校信息写入BindingResult中,在要校pojo添加BingdingResult 一个BindingResult对应一个pojo,且BingdingResult放在pojo的后

 

 

页头

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" 

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>

 

 

在需要错误信息地方:

<spring:hasBindErrors name="item">

<c:forEach items="${errors.allErrors}" var="error">

       ${error.defaultMessage }<br/>

</c:forEach>

</spring:hasBindErrors>

 

 

明:

<spring:hasBindErrors name="item">表示如果item参数定校验错误边显错误信息。

 

 

1.5 分组校验

如果两使用同一个Items类则可以定校

 

就是一个标识里定一个接口:

public interface ValidGroup1 {

 

}

public interface ValidGroup2 {

 

}

 

 

指定分

public class Items {

    private Integer id;

//里指定分ValidGroup1,此@Size只适用ValidGroup1

    @Size(min=1,max=30,message="{item.name.length.illigel}",groups={ValidGroup1.class})

    private String name;

 

 

@RequestMapping("/editItemSubmit")

public String editItemSubmit(@Validated(value={ValidGroup1.class}) @ModelAttribute("item") Items items,BindingResult result,

                     @RequestParam("pictureFile") MultipartFile[] pictureFile,Model model)

                     throws Exception {

 

 

@Validated中添加value={ValidGroup1.class}表示商品修改使用了ValidGroup1验规则,也可以指定多个分用逗号分隔,

@Validated(value={ValidGroup1.classValidGroup2.class })

 1.6 重写validator

public class UserValidator implements Validator{

 

        public static final String LOGIN = "login";

        public static final String UPDATE_PASSWORD = "updatepassword";

       

        private String type;

       

        public UserValidator(String _type) {

                this.type = _type;

        }

       

        @Override

        public boolean supports(Class<?> arg0) {

                return UserCommand.class.equals(arg0);

        }

 

        @Override

        public void validate(Object target, Errors errors) {

               

                UserCommand command = (UserCommand)target;

                ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "field.required");

                if(StringUtils.equals(type, LOGIN)){

                        //

                        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "username", "field.required");

                }else if(StringUtils.equals("type", UPDATE_PASSWORD)){

                        //修改密

                        ValidationUtils.rejectIfEmpty(errors, "newPass", "field.required");

                        if(!errors.hasFieldErrors("newPassword")){

                                if(command.getNewPassword().equals(command.getPasswordAgain())){

                                        errors.reject("passwordAgain", "user.passwordAgainb.error");

 

 

  1. <spring:hasBindErrors name="user">  

  2.     <c:if test="${errors.fieldErrorCount > 0}">  

  3.         字段错误:<br/>  

  4.         <c:forEach items="${errors.fieldErrors}" var="error">  

  5.             <spring:message var="message" code="${error.code}" arguments="${error.arguments}" text="${error.defaultMessage}"/>  

  6.             ${error.field}------${message}<br/>  

  7.         </c:forEach>  

  8.     </c:if>  

  9.   

  10.     <c:if test="${errors.globalErrorCount > 0}">  

  11.         全局错误:<br/>  

  12.         <c:forEach items="${errors.globalErrors}" var="error">  

  13.             <spring:message var="message" code="${error.code}" arguments="${error.arguments}" text="${error.defaultMessage}"/>  

  14.             <c:if test="${not empty message}">  

  15.                 ${message}<br/>  

  16.             </c:if>  

  17.         </c:forEach>  

  18.     </c:if>  

  19. </spring:hasBindErrors> 

 

                                       

                                }

                        }

                }

               

        }

 

       

}

 

龙之天空
粉丝 7
博文 79
码字总数 18140
作品 0
宁波
私信 提问
加载中
请先登录后再评论。
springboot微服务系列教程

微服务系列教程 Spring Boot 2是微服务的基础,在2018年3月初,Spring Boot 正式宣布进入2.0时代。下面一起来步入Spring Boot 2时代,领略Spring Boot 2带来的开发乐趣吧! 本系统源代码地址...

鱼煎
2019/01/13
1.8K
0
微服务系列教程

Spring Boot 2是微服务的基础,在2018年3月初,Spring Boot 正式宣布进入2.0时代。下面一起来步入Spring Boot 2时代,领略Spring Boot 2带来的开发乐趣吧! 本系统源代码地址: https://gith...

skyme
2018/05/01
0
0
微服务系列教程

Spring Boot 2是微服务的基础,在2018年3月初,Spring Boot 正式宣布进入2.0时代。下面一起来步入Spring Boot 2时代,领略Spring Boot 2带来的开发乐趣吧! 本系统源代码地址: https://gith...

skyme
2018/05/01
0
0
微服务系列教程

Spring Boot 2是微服务的基础,在2018年3月初,Spring Boot 正式宣布进入2.0时代。下面一起来步入Spring Boot 2时代,领略Spring Boot 2带来的开发乐趣吧! 本系统源代码地址: https://gith...

osc_o9gnlxa0
2018/05/01
4
0
面试常问Spring IOC,不得不会。

广义的 IOC IoC(Inversion of Control) 控制反转,即“不用打电话过来,我们会打给你”。 两种实现: 依赖查找(DL)和依赖注入(DI)。 IOC 和 DI 、DL 的关系(这个 DL,Avalon 和 EJB 就是...

osc_jc3yo8w2
2019/02/19
22
0

没有更多内容

加载失败,请刷新页面

加载更多

将博客搬至CSDN

搬家说明 本人已经即将吧博客搬迁到CSDN,地址为https://blog.csdn.net/wyn_365 开源中国很好,但是博客记录功能还是较少的。

wyn-365
29分钟前
24
0
国产存储芯片现状如何?

美光科技在6月29日(本周一)公布了第三季度的财报,美光首席执行官Sanjay Mehrotra指出:“展望2020下半年的市场趋势,有三个关键点。首先,希望数据中心的前景广阔;第二,希望智能手机和消...

osc_tgsn1w46
29分钟前
7
0
gps时钟同步器(卫星时钟方式器)在DCS控制系统应用

gps时钟同步器(卫星时钟方式器)在DCS控制系统应用 gps时钟同步器(卫星时钟方式器)在DCS控制系统应用 安徽京准电子提供,技术交流官微(ahjzsz) 前言 随着计算机和网络通信技术的飞速发展...

osc_zx0inizr
31分钟前
8
0
Qt5.9 5.12等高版本的安装问题

Qt5.9之后的版本,安装时需要登陆,不然无法next,因此在安装时建议先断网,next之后可以把网络再连上,不管是windows还是mac都有这种现象。

osc_ohsup7nf
33分钟前
5
0
Go 语言编程 — go 指令

目录 文章目录 目录 go 指令 go run 试运行 go build 编译 go install 安装 go get 下载并安装 go test 测试 go env 环境变量 go fmt 格式化源代码 go 指令 Golang 本身就是一个程序,包含了...

osc_7wfxe2gv
35分钟前
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部