1.struts中如何进行数据校验

  在每一个Action类中,数据校验一般都写在业务方法中,比如login()、register()等。struts提供了数据校验功能。每个继承自ActionSupport的Action类都可以实现一个validate()方法。struts使用拦截器org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor进行数据校验,根据拦截器的执行流程,它会在执行Action的业务方法之前调用intercecpt()方法,因此可以完成数据校验的功能。

  在ActionSupport类中有一个ValidationAwareSupport的对象,该对象维护了一个Map<String, List<String>> fieldErrors属性,用它来存储错误信息。在Action类的业务方法中调用

  1. super.addFieldError("user","用户名必须填写!");

会执行ActionSupport中的

  1. public void addFieldError(String fieldName, String errorMessage) {
  2. this.validationAware.addFieldError(fieldName, errorMessage);
  3. }

ValidationAwareSupport类中的addFieldError如下:

  1. public synchronized void addFieldError(String fieldName, String errorMessage) {
  2. Map errors = this.internalGetFieldErrors();
  3. Object thisFieldErrors = (List)errors.get(fieldName);
  4. if(thisFieldErrors == null) {
  5. thisFieldErrors = new ArrayList();
  6. errors.put(fieldName, thisFieldErrors);
  7. }
  8.  
  9. ((List)thisFieldErrors).add(errorMessage);
  10. }

该方法将一条错误信息添加到Map中,一个key值可以对应多条错误信息。

2.struts中数据验证的方法

  • 代码方式验证Action中指定的方法(validate+要验证的方法名作为验证函数名)

  在Action类中重写validate()方法。

  1. //仅验证register方法
  2. public void validateRegister(){
  3. if(user.getUserName() == null||"".equals(user.getUserName()))
  4. {
  5. //保存错误信息
  6. super.addFieldError("user","用户名必须填写!");
  7. }
  8.  
  9. if(user.getPassword() == null||"".equals(user.getPassword()))
  10. {
  11. //保存错误信息
  12. super.addFieldError("user","密码必须填写!");
  13. }
  14. }
  • 代码方式验证Action中的所有方法(直接重写validate()方法)

  • XML方式验证Action中指定的方法(xml命名为ActionClassName-ActionName-validation.xml)

  • XML方式验证Action中的所有方法(xml命名为ActionClassName-validation.xml)

  使用validate()方法进行验证,涉及很多重复的验证逻辑,例如:非空验证、数值验证、email验证、日期验证等。因此struts对于常用的验证进行了封装,提供了验证器。

  struts提供的验证器在xwork-core-2.3.4.1.jar!\com\opensymphony\xwork2\validator\validators\default.xml中,共16个,如下:

  1. <validators>
  2. <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
  3. <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
  4. <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
  5. <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
  6. <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
  7. <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
  8. <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
  9. <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
  10. <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
  11. <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
  12. <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
  13. <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
  14. <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
  15. <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
  16. <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
  17. <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
  18. </validators>

  xml文件名称语法:ActionClassName-validation.xml,而且需要与当前要验证的action 在同一目录。(和局部转换器相似)

  使用xwork-core-2.3.4.1.jar!\xwork-validator-1.0.dtd约束来写xml文件。

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <!DOCTYPE validators PUBLIC
  3. "-//Apache Struts//XWork Validator 1.0.2//EN"
  4. "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
  5. <validators>
  6. <field name="user.userName">
  7. <field-validator type="requiredstring">
  8. <message>用户名必须填写!</message>
  9. </field-validator>
  10. </field>
  11. <field name="user.password">
  12. <field-validator type="requiredstring">
  13. <message>密码必须填写!</message>
  14. </field-validator>
  15. <field-validator type="stringlength">
  16. <param name="minLength">6</param>
  17. <message>密码长度不能小于6!</message>
  18. </field-validator>
  19. </field>
  20. <field name="user.birth">
  21. <field-validator type="date">
  22. <message></message>
  23. </field-validator>
  24. </field>
  25. </validators>

struts中的数据校验的更多相关文章

  1. Struts 2的数据校验

    既然说到了Struts 2的数据校验,我们该怎么去实现呢?又是通过什么来实现呢? 就让我带着大家一起来走进Struts 2的数据校验吧. 首先我们会想到在Stuts 2的登录案例中我们定义了一个Act ...

  2. struts中简单的校验

    Struts中简单的校验 “计应134(实验班) 凌豪” Struts2校验简要说明:struts2中通常情况下,类型转换要在数据校验之前进行.类型转换其实也是基本的服务器端校验,合法数据必然可以通过 ...

  3. Struts2中validate数据校验的两种常用方法

    本文主要介绍Struts2中validate数据校验的两种方法及Struts2常用校验器.  1.Action中的validate()方法 Struts2提供了一个Validateable接口,这个接 ...

  4. SpringMvc中的数据校验

    SpringMvc中的数据校验 Hibernate校验框架中提供了很多注解的校验,如下: 注解 运行时检查 @AssertFalse 被注解的元素必须为false @AssertTrue 被注解的元素 ...

  5. Spring官网阅读(十七)Spring中的数据校验

    文章目录 Java中的数据校验 Bean Validation(JSR 380) 使用示例 Spring对Bean Validation的支持 Spring中的Validator 接口定义 UML类图 ...

  6. [WPF 基础知识系列] —— 绑定中的数据校验Vaildation

    前言: 只要是有表单存在,那么就有可能有对数据的校验需求.如:判断是否为整数.判断电子邮件格式等等. WPF采用一种全新的方式 - Binding,来实现前台显示与后台数据进行交互,当然数据校验方式也 ...

  7. 【SpringMVC学习06】SpringMVC中的数据校验

    这一篇博文主要总结一下springmvc中对数据的校验.在实际中,通常使用较多是前端的校验,比如页面中js校验,对于安全要求较高的建议在服务端也要进行校验.服务端校验可以是在控制层conroller, ...

  8. SilverlightMVVM模式中的数据校验

    silverlight的数据校验大体分成3种类型: 数据是非必填的但是需要满足相应数据格式的 数据是必填的且可能需要进行数据格式校验的 其他(如数据的联动校验) 以下的数据校验方式针对第二种: 在相应 ...

  9. SpringBoot中BeanValidation数据校验与优雅处理详解

    目录 本篇要点 后端参数校验的必要性 不使用Validator的参数处理逻辑 Validator框架提供的便利 SpringBoot自动配置ValidationAutoConfiguration Va ...

随机推荐

  1. Android 上千张图片的列表滑动加载

    一般项目中图片加载用的比较多的是ImageLoader 但是需求自己配置一些参数 上手有些复杂 对于手机图库中有上千张图片需要加载时 一个使用性能很好的库Glide可以解决 效果图如下 滑动非常流畅 ...

  2. Java中for循环遍历List的两种方法

    我们平常使用的方法: List<WebElement> element = driver.findElements(By.tagName("input"));      ...

  3. 实体类实现Parcelable(包含boolean类型)

    实体类实现Parcelable接口需要实现方法: public ExtSignClockEntity(Parcel in) { timeMess = in.readString(); repeatMe ...

  4. 【java】异常和处理

    (根据http://www.imooc.com/learn/110 陈码农老师教学视频总结)   一.异常体系结构 所有不正常类都继承于Throwable类 1.异常两个子类 error & ...

  5. CSS3学习笔记之属性值

    font-family 设置文本的字体名称. font-style 设置文本样式. 取值 normal不使用斜体. italic使用斜体. oblique使用倾斜体. inherit从父元素继承. f ...

  6. Python开发简单爬虫 - 慕课网

    课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序   课程目录 第1章 课程介绍 ...

  7. LaTeX内容总结

    欢迎关注我的社交账号: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://gith ...

  8. redis.conf详解

    # Redis示例配置文件 # 注意单位问题:当需要设置内存大小的时候,可以使用类似1k.5GB.4M这样的常见格式: # # 1k => bytes # 1kb => bytes # 1 ...

  9. H5网页播放器播不了服务器上的mp4视频文件

    打开IIS,在功能视图里找到MIME类型菜单,打开该菜单后鼠标右键添加.mp4扩展名的MIME类型video/mp4 其他视频文件播放不了估计也得在IIS里添加对应的MIME类型(从服务器下载文件时也 ...

  10. Permutations [LeetCode]

    Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...