• .Net转Java自学之路—SpringMVC框架篇四(校验)


    SpringMVC使用Hibernate的校验框架validation(和Hibernate没有关系)。

    页面提交请求的参数,请求到Controller方法中,使用validation进行校验。除去使用校验Jar包外,还需要在SpringMVC.xml中来配置validation校验器。

    <!-- 校验器,配置validator -->
    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <!--hibernate校验器-->
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
        <!--指定校验使用的资源文件,在文件中配置校验的错误信息,若不指定则默认使用classpath下的ValidationMessage.peoperties-->
        <property name="validationMessageSource" ref="validationMessageSource"></property>
    </bean>
    
    <!-- 配置validationMessageSource
        校验错误信息配置文件 -->
    <bean id="validationMessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <!-- 资源名称 指定校验信息的资源文件的基本文件名称,不包括后缀,后缀默认是properties -->
        <property name="basenames">
            <list>
                <value>classpath:validationMessageSource</value>
            </list>
        </property>
        <!-- 指定文件的编码 -->
        <property name="fileEncodings" value="utf8"></property>
        <!-- 对资源文件内容缓存的时间,单位秒 -->
        <property name="cacheSeconds" value="120"></property>
    </bean>

      将校验器注入到处理器适配器中

    <mvc:annotation-driven conversion-service="conversionService" validator="validator">
    </mvc:annotation-driven>

      在validationMessageSource.properties中配置校验错误信息。如:

    goods.name.size.msg=输入的名称长度在1到20个字符之间
    goods.time.isNULL=时间不能为空
    public class Goods{
        @Size(min=1,max=20,message="{goods.name.size.msg}")
        private String name;
        
        @NotNull(message="{goods.time.isNULL}")
        private Date time;
        
        //GET/SET Code...
    }

    捕获校验错误信息:

      在需要校验的controller方法的形参pojo前加入@Validated,pojo后面添加BindingResult bindingResult接收校验出错信息。
      注:@Validation和BindingResult是配对出现的。并且形参顺序是固定的。

    public String edit(Model model,Integer id,@Validated GoodsCustom goodsCustom,BindingResult bindingResult) throws Exception{
        //判断是否有错误信息
        if(bindingResult.hasErrors()){
            //输出错误信息
            List<ObjectError> allerr = bindingResult.getAllErrors();
            
            for(ObjectError oe : allerr){
                //得到错误信息
                oe.getDefaultMessage();
            }
        }
    }

      然后再controller方法中捕获的错误信息传到页面中

    model.addAttribute("AllError",allerr);

    分组校验:

      在pojo中帝国一校验规则,而pojo是被多个controller所公用,当不同的controller方法对同一个pojo进行校验,但每个controller方法需要不同的校验规则。

      综上所述,则需要定义多个校验分组(Java接口),分组中定义有校验规则。每个controller方法使用不同的校验分组。

    public interface ValidatedGroupOne{
        //接口中不需要定义任何方法,仅是对不同的校验规则进行分组
        //如当前分组只校验名称长度
    }

      在校验规则中用groups指定此校验属于那个分组,groups可以定义多个分组。

    public class Goods{
        
        @Size(min=1,max=20,message="{goods.name.size.msg}",groups={ValidatedGroupOne.class})
        private String name;
        
        @NotNull(message="{goods.time.isNULL}")
        private Date time;
    }

      在controller方法中使用分组校验:@Validated(value={分组校验接口.class})指定使用那个分组的校验。

    public String edit(Model model,Integer id,@Validated(value={ValidatedGroupOne.class}) GoodsCustom goodsCustom,BindingResult bindingResult) throws Exception{
    
    }
  • 相关阅读:
    对图像组成不了解?这样学习Matplotlib必走弯路!
    Python数据可视化Matplotlib——Figure画布背景设置
    Matplotlib风羽自定义
    matplotlib删除地图投影上的等值线及风场
    利用Eric+Qt Designer编写倒计时时钟
    Python数据可视化利器Matplotlib,绘图入门篇,Pyplot介绍
    matplotlib极坐标方法详解
    Windows下Python读取GRIB数据
    简明Python教程自学笔记——命令行通讯录
    基于Python的Grib数据可视化
  • 原文地址:https://www.cnblogs.com/zltao/p/10665620.html
Copyright © 2020-2023  润新知