目录

springMvc 校验 准备

sprngMvc 使用 hinernate 的校验框架 validation

导入 validation 框架需要的包 ;

hibernate-validation 、jboss-logging、validation-api ;


踩坑

还是有 版本 的问题,hibernate-validation 的版本不要太高,使用几年前的版本,不要使用新的版本,否则会提示 unsupported major.minor version 52.0 的错误,这错误是告诉我们要使用 JDK1.8,我的是 JDK1.7;

但是当你把 hibernate-validation 的版本降低以后,你会发现可能还会报错,报错 java.lang.ClassNotFoundException: com.fasterxml.classmate.Fileter ,反正是缺少 classmate 这个包,再去把这个包,加进来,至此,我的工程没有再报错 ;

搞了一下午,时间全花在这种鸡毛蒜皮的事上了 !!还是回去考南大软院吧,摆脱这种无聊的工作 ;----------- 2018年9月19日17:09:07


配置校验器

springMvcxml 中进行配置校验器 ;

    <!--配置校验器-->
<bean class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<!--配置检验器 使用 hibernate 的校验器 -->
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
<!--指定校验使用的配置文件,如果不指定,则默认读取 classPath : validationMessage.properties-->
<property name="validationMessageSource" ref="messageSource"/>
</bean> <!--配置校验错误信息-->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!--配置资源文件名-->
<property name="basenames">
<list>
<!--配上错误信息文件地址-->
<value>validation.CustomerValidationMessage</value>
</list>
</property>
<!--资源文件编码格式-->
<property name="fileEncodings" value="UTF-8"/>
<!--对资源文件的缓存时间,单位为 秒-->
<property name="cacheMillis" value="120"/>
</bean>

如果上面的错误校验器,不能读取错误配置信息的内容,就换成下面的:

  <!-- 校验错误信息配置文件 -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<!-- 资源文件名 -->
<property name="basenames">
<list>
<value>validation.CustomValidationMessage</value>
</list>
</property>
<!-- 资源文件编码格式 -->
<property name="defaultEncoding" value="utf-8"/>
<!-- 对资源文件内容缓存时间,单位秒 -->
<property name="cacheSeconds" value="120"/>
</bean>

将校验器注入到适配器中

发现许多和 handler 有关的东西,都是注入到适配器中的,比如之前的 自定义参数绑定 ;在标签 <mvc:annotation-driven 中定义 ;

<!--使用注解的映射器、适配器-->
<mvc:annotation-driven validator="validatorFactoryBean"/>

在 pojo 中配置校验规则

使用注解,注意看清注解的包,都是 validation 包下面的注解,不要导错包!

不要在 message 里面进行错误提示信息的硬编码,将错误提示信息写到之前配置的检验错误文件中 ,进行引用;

  /**
* 校验字段的长度,message里面写上错误提示信息,这里引用错误提示文件的内容,而非直接硬编码
*/
@Size(min = 1,max = 7,message = "{Item.name }")
private String name; /**
* 检验时间,不可为空
*/
@NotNull(message = "{Item.ctrateTime}}" )
private Date ctrateTime;

在 controller 层进行检验

handler 的需要检验的形参前面加注解 @Validated ;在需要校验的形参后面添加一个参数 BindingResult 用于接受校验错误信息 ;

BindingResult@Validated成对使用的,也就是有对个形参需要检验的时候,就写读个 BindingResult@Validated ;并且 BindingResult@Validated 的顺序也是固定的 ;


获取错误信息


// 判断是否有错误信息
if (bindingResult.hasErrors()) {
// 获取所有错误信息
List<ObjectError> list = bindingResult.getAllErrors();
// 打印错误信息
for (ObjectError objectError : list) {
System.out.println(objectError.getDefaultMessage());
}
}

将错误信息传到视图中

在形参中添加一个 model ,将错误信息封装到其中 ;

  @RequestMapping(value = "/updateItem", method = {RequestMethod.POST})
public String updateItem(Model model , @Valid Item item, BindingResult bindingResult) throws Exception { // 判断是否有错误信息
if (bindingResult.hasErrors()) {
// 获取所有错误信息
List<ObjectError> list = bindingResult.getAllErrors();
model.addAttribute("errorList",list) ;
// 跳准到 编辑 页面
return "Item/ItemUpdate";
} // 调用 services 层方法
itemsServices.updateItem(item);
return "success";
}

分组检验

我们将检验规则,以注解的形式写在了 pojo 上,但是当我们多个方法需要对参数进行检验的时候,并且这些方法并不是每个方法都需要对所有的规则进行校验,这时候我们需要进行分组校验 ;

分组也就是定义一个接口,但是接口中不需要我们做任何事,只是一个空接口,起到分门别类的作用 ;

我们在 pojo 的检验规则上,添加分组,然后在handler 方法的形参的注解 @Validated 上添加分组value=xxxx.class' 来使用具体的分组校验 ;

  @Size(min = 1,max = 7,message = "{Item.name}",groups = {ItemName.class})
private String name; @RequestMapping(value = "/updateItem", method = {RequestMethod.POST})
public String updateItem(Model model , @Validated(value = {ItemName.class}) Item item, BindingResult bindingResult) throws Exception { '''''''
}

信息回显

  1. springMvc 默认对 pojo 对象数据进行回显

    pojo 对象传进 controller 方法中时候,springMvc 会自动的将其添加到 request 域中,key 就是 pojo对象类型(首字母小写) ;

  2. @ModelAttribute(“xxx”)

    使用注解,相当于可以随意的更改 key 的值 ;

    在需要回显的 controller 形参前面,加上这个注解 ,它在 request 域中的 key 就是注解中的内容 ;

    @ModelAttribute("xxx") 也可以将方法的返回值,传到页面 ,只需要将该注解,注解到方法上,不需要为其配置 requestMapping ,也就是说该方法不能通过 url 访问到,但是只要到页面上写上 key 值,就可以访问到;


(十)springMvc 校验的更多相关文章

  1. springMVC学习(7)-springMVC校验

    一.校验理解: 对于安全要求较高点建议在服务端进行校验. 控制层conroller:校验页面请求的参数的合法性.在服务端控制层conroller校验,不区分客户端类型(浏览器.手机客户端.远程调用) ...

  2. 如何在SSM项目配置springMVC校验框架validator

    1.在springMVC配置文件配置添加如下信息 <!-- 表单验证框架 --> <bean id="validator" class="org.spr ...

  3. springMVC校验器(validator)

    springmvc使用的是Hibernate Validator(和Hibernate的ORM无关)来完成校验功能 一.普通校验 1.导入jar包 2.编写校验错误配置文件 3.配置校验错误信息文件 ...

  4. springMVC 校验时,CustomValidationMessages.properties中的错误提示信息的中文乱码 问题

    今天在学习springmvc的校验时,遇到了CustomValidationMessages.properties配置文件的信息,才错误提示时是乱码的问题:在网上找了很多方法都没解决:最后原来是在配置 ...

  5. springmvc 校验---spring校验

    springmvc提供了灵活的可拓展的校验方式,根据不同的项目可选择适合的校验方式,首先介绍下springmvc中内置的校验实现方式! 1.实现 org.springframework.validat ...

  6. springMVC:校验框架:多规则校验,嵌套校验,分组校验;ssm整合技术

    知识点梳理 课堂讲义 学习目标 能够阐述表单验证的分类和区别 能够运用表单验证的常用注解 能够编写表单验证的示例 能够编写SSM整合的应用案例 能够总结SSM整合的步骤 1 校验框架 1.1 入门-视 ...

  7. (转)SpringMVC学习(十)——SpringMVC与前台的json数据交互

    http://blog.csdn.net/yerenyuan_pku/article/details/72514022 json数据格式在接口调用中.html页面中比较常用,json格式比较简单,解析 ...

  8. springmvc 校验--JSR

    1.使用JSR规范是简单使用的,如果使用hibernate校验则需要在工程中添加hibernate-validate.jar,以及其他依赖的jar包. 2,在mvc配置文件中使用<mvc:ann ...

  9. Spring+SpringMVC+MyBatis深入学习及搭建(十六)——SpringMVC注解开发(高级篇)

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7085268.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十五)——S ...

随机推荐

  1. c语言 内存,可执行文件

    c语言代码与可执行文件的映射关系 函数中的代码 存储在.text 段中 已初始化的全局变量 存储在.data段 未初始化的全局变量 存储在.bss段中 程序类型 映射到file header中 面试题 ...

  2. servlet实现类似target="_top"功能

    通过网上很多解决方案,大部分都是重定向,或者页面跳转,但是我试了试都不能脱离原来框架,后来发现,可以直接通过form表单的target来实现从servlet跳转到frameset的指定框架,这就不用再 ...

  3. CF1200C

    CF1200C 题意: 问内圆和外圆分别分成n.m份,每份有标号,问是否可以从一个部分走到另一个部分,12点钟位置一定有个线. 解法: 如果有一堵墙贯穿1和2,那么会使得两边不连通.这样的墙会显然出现 ...

  4. [题解] [CF 1250J] The Parade

    题面 题目大意: 给定一个 \(n\) , 所有军人的数量均在 \([1, n]\) 给定 \(a_i\) 代表高度为 \(i\) 的军人的个数 你要将这些军人分成 \(k\) 行, 满足下面两个条件 ...

  5. Truffle测试框架

    Truffle测试框架 2018年06月08日 19:01:19 tianlongtc 阅读数 1000   Truffle 有一个标准的自动化测试框架,让你可以非常方便地测试您的合约.这个框架允许您 ...

  6. 国内it论坛

    社区是聚集一类具有相同爱好或者相同行业的群体,IT技术社区就是聚集了IT行业内的技术人,在技术社区可以了解到行业的最新进展,学习最前沿的技术,认识有相同爱好的朋友,在一起学习和交流. 技术社区一般有三 ...

  7. iptables之精髓(一)

    防火墙相关概念 从逻辑上讲.防火墙可以大体分为主机防火墙和网络防火墙. 主机防火墙:针对于单个主机进行防护. 网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网. ...

  8. [Scikit-learn] Dynamic Bayesian Network - Conditional Random Field

    李航,第十一章,条件随机场 参考:[PGM] Markov Networks 携代码:用 Python 通过马尔可夫随机场(MRF)与 Ising Model 进行二值图降噪[推荐!] CRF:htt ...

  9. uni-app 使用Vuex+ (强制)登录

    一.在项目的根目录下新建一个store文件夹,然后在文件夹下新建一个index.js文件 二.在新建的index.js下引入vue和vuex,具体如下: //引入vue和vuex import Vue ...

  10. BigDecimal数据的加 减 乘 除 N次幂运算 以及比较大小

    在实际开开发过程中BigDecimal是一个经常用到的类: 它可以进行大数值的精确却运算,下面介绍一下它的加-减-乘-除以及N次幂的操作操作 import java.math.BigDecimal; ...