zoukankan      html  css  js  c++  java
  • Springmvc_validation 效验器

    springmvc-validation效验器的使用介绍

      对于任何一个应用来说,都会做数据的有效性效验,但是只在前端做并不是很安全,考虑到安全性這个时候会要求我们在服务端也对数据进行有效验证,springmvc自身对数据在服务端有一个比较好的支持,springmvc能将我们前台提交的数据按照我们事先定下的规则,进行效验判断,对于不合格的数据信息,springmvc会把他保存到一个BindingResult 的类里面,这里面存放是错误集合,从而言之就可以把这些错误信息输出到jsp页面。

    使用validation接口进行验证:

        在我们注解驱动中注入validation 效验器<mvc:annotation-driven conversion-service="conversionService" validator="validator"/> 

    所需依赖的jar包:

       

    springmvc配置参考:

      这里我们指定了资源文件,以及一些常用配置,往后错误消息配置到CustomValidationMessage.properties 中以key value 形式读取

     1 <!--hibernate-validator 效验器 
     2         org.springframework.validation.beanvalidation.LocalValidatorFactoryBean 這个是spring-context 提供的效验的接口
     3     -->
     4     <bean id = "validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
     5         <!-- hibernate的效验器 -->
     6             <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
     7         <!-- 加载资源文件,在指定文件中配置错误信息如果不加载默认会去找classpath下的ValidationMessage.properties -->
     8             <property name="validationMessageSource" ref ="messageSource"></property>
     9     </bean>
    10     <bean id = "messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    11         <!-- 加载资源文件名
    12             basenames:不用加properties
    13     --> 
    14         <property name="basenames">
    15             <list>
    16                 <value>classpath:CustomValidationMessage</value>
    17             </list>
    18         </property>
    19         <!-- 资源文件的编码格式 -->
    20         <property name="defaultEncoding" value="UTF-8"/>
    21         <!-- 加载超时 120 秒 重新加载-->
    22         <property name="cacheSeconds" value="120"/> 
    23     </bean>

    我们实体类pojo 的参考:

     1     //效验名称在1 到 10 字符之间 不建议在里面直接写message 建议写在配置文件里面以国际化方式去读取错误信息
     2     @Size(min=2,max=10,message="{items.name.length.error}")
     3     @NotNull(message="{items.name.isNull}")
     4     private String name;
     5     //非空的效验
     6     @NotNull(message="{items.createtime.isNull}")
     7     private Date createtime;
     8     
     9     @NotNull(message="{items.detail.isNull}")
    10     private String detail;

    controller代码参考:

      在你需要效验的pojo前面添加@Validated 表示这是需要效验,在pojo 后面添加BindingResult 来接受它效验的错误信息

      注意:@Validated 和BindingResult 是配对出现,一前一后方式,这本案例中只是简单实现了這个功能,但并不是完整的。

     1 /**
     2      *     商品信息提交的方法
     3      * @return   重定向的使用
     4      * @throws Exception
     5      * @Validated: 注解效验器
     6      * BindingResult:接受错误信息 9      */
    10     @RequestMapping("/editItemsSubmit")
    11     public String editItemsSubmit(Model model, Integer id,@Validated ItemsCustom itemsCustom ,BindingResult bindingResult)throws Exception{
    12         if (bindingResult.hasErrors()) {
    13             List<ObjectError> itemsErrorList = bindingResult.getAllErrors();
    14             for(ObjectError objectError:itemsErrorList){
    15                 System.out.println(objectError.getDefaultMessage());
    16             }    
    17             model.addAttribute("itemsErrorList", itemsErrorList);
    18             return "items/editItems";
    19         }
    20         // 调用service 里面的接口方法 
    21         itemsService.updateItems(id, itemsCustom);
    22         // 使用重定向到
    23         //    queryitems.do return "redirect:queryItems.do"; 
    24         //使用forward  可以在其他页面获取值 对象等
    25         //return "forward:queryItems.do"; 
    26         return "success"; 
    27     }

    页面参JSP考代码:

      测试代码打印出错误消息

    1     <c:if test="${itemsErrorList != null }">
    2         <c:forEach items="${itemsErrorList }" var="error" varStatus="index">
    3             ${error.defaultMessage}
    4         </c:forEach>
    5     </c:if>

    在资源文件中配置错误信息CustomValidationMessage.properties:

    1 # 配置效验器的错误信息,key value 形式
    2                         # items 的错误配置
    3 items.name.length.error=请输入2到10个字符的商品名称!
    4 items.name.isNull=商品名称不能为空!
    5 items.createtime.isNull=请输入商品的生产日期!
    6 items.detail.isNull=商品描述不能为空!

    Validation 效验常用限制注解:

      @Null:限制只能为null

      @NotNull:限制必须不能为空

      @AssertFalse 限制必须为false

      @AssertTrue 限制必须为true

      @DecimalMax(value) 限制必须为一个不大于指定值得数字

      @DecimalMax(value)限制必须为一个不小于指定值得数字

      @Digits(integer,fraction)限制必须为一个小数,且整数部分的位数不能超过integer,小数部分不能超过fraction

      @Futrue 限制必须为一个将来的日期

      @Max(value) 限制必须为一个不大于指定值得数字

      @Min(value)限制必须为一个不小于指定值得数字

      @Past限制必须为一个过去的时间

      @Pattern(value)限制为符合指定的正则表达式

      @Size(max,min)限制字符长度在min 到 max 之间

  • 相关阅读:
    Javascript正则表达式详解转载
    转载Sqlserver2005 存储过程分页
    转载手把手教你用C#打包应用程序
    学习内容
    用C#实现将HTML文件转换为CHM文件(转)
    C# Windows服务添加安装程序
    sql 2008评估期已过有关如何升级,企业试用版到期,升级为企业版+sql2008破解
    iis不能启动是什么原因?错误提示:“提示服务器没有及时相应启动或控制请求”
    .NET 获取数据库中所有表名的方法
    如何获取Dynamics当前登录的用户的GUID,进而获取用户的信息
  • 原文地址:https://www.cnblogs.com/tanglie/p/6755186.html
Copyright © 2011-2022 走看看