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类的业务方法中调用

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

会执行ActionSupport中的

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

ValidationAwareSupport类中的addFieldError如下:

    public synchronized void addFieldError(String fieldName, String errorMessage) {
Map errors = this.internalGetFieldErrors();
Object thisFieldErrors = (List)errors.get(fieldName);
if(thisFieldErrors == null) {
thisFieldErrors = new ArrayList();
errors.put(fieldName, thisFieldErrors);
} ((List)thisFieldErrors).add(errorMessage);
}

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

2.struts中数据验证的方法

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

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

    //仅验证register方法
public void validateRegister(){
if(user.getUserName() == null||"".equals(user.getUserName()))
{
//保存错误信息
super.addFieldError("user","用户名必须填写!");
} if(user.getPassword() == null||"".equals(user.getPassword()))
{
//保存错误信息
super.addFieldError("user","密码必须填写!");
}
}
  • 代码方式验证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个,如下:

<validators>
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>

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

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

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<field name="user.userName">
<field-validator type="requiredstring">
<message>用户名必须填写!</message>
</field-validator>
</field>
<field name="user.password">
<field-validator type="requiredstring">
<message>密码必须填写!</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<message>密码长度不能小于6!</message>
</field-validator>
</field>
<field name="user.birth">
<field-validator type="date">
<message></message>
</field-validator>
</field>
</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. SenchaTouch介绍和Sencha Architect介绍以及安装

    一.SenchaTouch介绍 Sencha Touch框架是世界上第一个基于HTML 5的Mobile App框架. 在Sencha Touch这个名词中,包括了两个组成部分,其中Sencha的前身 ...

  2. Python设计模式之单例模式

    1.由于语言的特性不同,设计模式的实现方式和实现难度也会不同 2.有的模式已经在语言内置了,比如迭代器模式. 3.单例模式可以直接用模块级变量来实现 4.普通工厂模式可以直接通过传入"类名& ...

  3. OpenCV3编程入门笔记(5)重要章节小节及核心函数

  4. noip2016酱油记day1

    真的是noip2016酱油记了. t1模拟,应该可以过. t2用了个简单的桶瞎搞,估计剩50pt了. t3直接不会写. 心好累... 考的分数肯定没去年高. 但不论如何,明天正常发挥就好. 正常发挥下 ...

  5. HTML5 localStorage and sessionStorage

    转载至:http://blog.csdn.net/fdipzone/article/details/25517615 HTML5 提供两种web存储方法,localStorage 与 sessionS ...

  6. 33-Url辅助方法

    Url辅助方法与HTML辅助方法很类似,HTML辅助方法用来产生HTML标签,而Url辅助方法则负责用来产生Url网址. @Url.Action("About") 最后的输出网址如 ...

  7. [saiku] 配置saiku实时展现查询数据

    缘起: 在默认的情况下,saiku是不能对数据进行实时展现的,只能通过刷新按钮或者重启服务器来刷新数据 这样以来会有很多的麻烦,每天得手动去刷新,这个操作只有管理员可以操作,在刷新以前客户看到的都是缓 ...

  8. hdu---(1325)Is It A Tree?(并查集)

    Is It A Tree? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  9. IO流--字符流

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java ...

  10. [译]Quartz 框架 教程(中文版)2.2.x 之第一课 开始使用Quartz框架

    第一课:开始使用Quartz框架 在你使用调度器之前,需要借助一些具体的例子去理解(谁愿意只是猜啊?).你可以使用SchedulerFactory类来达到程序调度的目的.有一些Quartz框架的用户可 ...