struts中的数据校验
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中的数据校验的更多相关文章
- Struts 2的数据校验
既然说到了Struts 2的数据校验,我们该怎么去实现呢?又是通过什么来实现呢? 就让我带着大家一起来走进Struts 2的数据校验吧. 首先我们会想到在Stuts 2的登录案例中我们定义了一个Act ...
- struts中简单的校验
Struts中简单的校验 “计应134(实验班) 凌豪” Struts2校验简要说明:struts2中通常情况下,类型转换要在数据校验之前进行.类型转换其实也是基本的服务器端校验,合法数据必然可以通过 ...
- Struts2中validate数据校验的两种常用方法
本文主要介绍Struts2中validate数据校验的两种方法及Struts2常用校验器. 1.Action中的validate()方法 Struts2提供了一个Validateable接口,这个接 ...
- SpringMvc中的数据校验
SpringMvc中的数据校验 Hibernate校验框架中提供了很多注解的校验,如下: 注解 运行时检查 @AssertFalse 被注解的元素必须为false @AssertTrue 被注解的元素 ...
- Spring官网阅读(十七)Spring中的数据校验
文章目录 Java中的数据校验 Bean Validation(JSR 380) 使用示例 Spring对Bean Validation的支持 Spring中的Validator 接口定义 UML类图 ...
- [WPF 基础知识系列] —— 绑定中的数据校验Vaildation
前言: 只要是有表单存在,那么就有可能有对数据的校验需求.如:判断是否为整数.判断电子邮件格式等等. WPF采用一种全新的方式 - Binding,来实现前台显示与后台数据进行交互,当然数据校验方式也 ...
- 【SpringMVC学习06】SpringMVC中的数据校验
这一篇博文主要总结一下springmvc中对数据的校验.在实际中,通常使用较多是前端的校验,比如页面中js校验,对于安全要求较高的建议在服务端也要进行校验.服务端校验可以是在控制层conroller, ...
- SilverlightMVVM模式中的数据校验
silverlight的数据校验大体分成3种类型: 数据是非必填的但是需要满足相应数据格式的 数据是必填的且可能需要进行数据格式校验的 其他(如数据的联动校验) 以下的数据校验方式针对第二种: 在相应 ...
- SpringBoot中BeanValidation数据校验与优雅处理详解
目录 本篇要点 后端参数校验的必要性 不使用Validator的参数处理逻辑 Validator框架提供的便利 SpringBoot自动配置ValidationAutoConfiguration Va ...
随机推荐
- SenchaTouch介绍和Sencha Architect介绍以及安装
一.SenchaTouch介绍 Sencha Touch框架是世界上第一个基于HTML 5的Mobile App框架. 在Sencha Touch这个名词中,包括了两个组成部分,其中Sencha的前身 ...
- Python设计模式之单例模式
1.由于语言的特性不同,设计模式的实现方式和实现难度也会不同 2.有的模式已经在语言内置了,比如迭代器模式. 3.单例模式可以直接用模块级变量来实现 4.普通工厂模式可以直接通过传入"类名& ...
- OpenCV3编程入门笔记(5)重要章节小节及核心函数
- noip2016酱油记day1
真的是noip2016酱油记了. t1模拟,应该可以过. t2用了个简单的桶瞎搞,估计剩50pt了. t3直接不会写. 心好累... 考的分数肯定没去年高. 但不论如何,明天正常发挥就好. 正常发挥下 ...
- HTML5 localStorage and sessionStorage
转载至:http://blog.csdn.net/fdipzone/article/details/25517615 HTML5 提供两种web存储方法,localStorage 与 sessionS ...
- 33-Url辅助方法
Url辅助方法与HTML辅助方法很类似,HTML辅助方法用来产生HTML标签,而Url辅助方法则负责用来产生Url网址. @Url.Action("About") 最后的输出网址如 ...
- [saiku] 配置saiku实时展现查询数据
缘起: 在默认的情况下,saiku是不能对数据进行实时展现的,只能通过刷新按钮或者重启服务器来刷新数据 这样以来会有很多的麻烦,每天得手动去刷新,这个操作只有管理员可以操作,在刷新以前客户看到的都是缓 ...
- 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 ...
- IO流--字符流
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java ...
- [译]Quartz 框架 教程(中文版)2.2.x 之第一课 开始使用Quartz框架
第一课:开始使用Quartz框架 在你使用调度器之前,需要借助一些具体的例子去理解(谁愿意只是猜啊?).你可以使用SchedulerFactory类来达到程序调度的目的.有一些Quartz框架的用户可 ...