Struts2的输入验证
一、概述:
XWork Validation Framework的内建验证程序.使用这些验证程序不需要编程,
只要在一个 XML
文件里对验证程序应该如何工作作出声明就可以了.需要声明的内容包括:
二、Struts2的声明式验证:
不只针对某个字段,而是针对多个字段的输入值之间的逻辑关系进行校验。例如:对再次输入密码的判断。
个步骤:
UserAction-User_create-validation.xml
struts.xml 文件中定义一个
<result name=“input”>的元素.
③ Struts2的一些内建验证规则:
④ 一个简单的字段验证声明:
- <!-- 待验证字段名称为username -->
- <field name="username">
- <!-- 使用非空验证器 -->
- <field-validator type="requiredstring">
- <param name="trim">true</param>
- <!-- 错误提示消息 -->
- <message>必须输入用户名</message>
- </field-validator>
- <!-- 使用正则验证器 -->
- <field-validator type="regex">
- <param name="expression"><![CDATA[(\w{6,20})]]></param>
- <message>用户名长度必须在6到20字符之间</message>
- </field-validator>
- </field>
⑤ 显示错误消息
a、若使用的是struts2的非simple主题,则自动显示错误消息
b、若使用的是simple主题,则需要 s:fielderror 标签或直接使用 EL 表达式(使用 OGNL)
${fieldErrors.age[0] }
或者
<s:fielderror fieldName="age"></s:fielderror> 推荐使用此方法
⑥ Struts2声明式验证的原理:
> Struts2 默认的拦截器栈中提供了一个 validation 拦截器
> 每个具体的验证规则都会对应具体的一个验证器. 有一个配置文件把验证规则名称和验证器关联起来了. 而实际上验证的是那个验证器.
该文件位于 com.opensymphony.xwork2.validator.validators 下的 default.xml
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
⑦ 短路验证
若对一个字段使用多个验证器, 默认情况下会执行所有的验证. 若希望前面的验证器验证没有通过, 后面的就不再验证, 可以使用短路验证
<validator …/>元素和
<field-validator …/>元素可以指定一个可选的
short-circuit属性,该属性指定该验证器是否是短验证器,默认值为false。
- <!-- 设置短路验证: 若当前验证没有通过, 则不再进行下面的验证 -->
- <field-validator type="conversion" short-circuit="true">
- <message>Conversion Error Occurred</message>
- </field-validator>
- <field-validator type="int">
- <param name="min">20</param>
- <param name="max">60</param>
- <message key="error.int"></message>
- </field-validator>
⑧ 不同的字段使用同样的验证规则, 而且使用同样的响应消息 ?
将错误消息配置在国际化资源文件中:
error.int=${getText(fieldName)} needs to be between ${min} and ${max}
age=年龄
count=数量
⑨ 自定义验证器:
I. 定义一个验证器的类
> 自定义的验证器都需要实现 Validator.
> 可以选择继承 ValidatorSupport 或 FieldValidatorSupport 类
> 若希望实现一个一般的验证器, 则可以继承 ValidatorSupport
> 若希望实现一个字段验证器, 则可以继承 FieldValidatorSupport
> 若验证程序需要接受一个输入参数, 需要为这个参数增加一个相应的属性,并提供对应的setter与getter方法
- public class IDCardValidator extends FieldValidatorSupport {
- @Override
- public void validate(Object object) throws ValidationException {
- //1. 获取字段的名字和值
- String fieldName = getFieldName();
- Object value = this.getFieldValue(fieldName, object);
- //2. 验证
- IDCard idCard = new IDCard();
- boolean result = idCard.Verify((String)value);
- //3. 若验证失败, 则 ...
- if(!result){
- addFieldError(fieldName, object);
- }
- }
- }
II. 在配置文件中配置验证器
> 默认情况下下, Struts2 会在 类路径的根目录下加载 validators.xml 文件. 在该文件中加载验证器.
该文件的定义方式同默认的验证器的那个配置文件: 位于 com.opensymphony.xwork2.validator.validators 下的 default.xml
> 若类路径下没有指定的验证器, 则从 com.opensymphony.xwork2.validator.validators 下的 default.xml 中的验证器加载
III. 使用: 和目前的验证器一样.
三、Struts2的编程式验证
Struts2的输入验证的更多相关文章
- struts2之输入验证
输入校验主要分为两种: 基于客户端的校验: 客户端校验主要作用是防止正常浏览者的误输入,仅能对输入进行初步过滤:对于一些用户恶意行为,客户端校验则无能为力. 基于服务端的校验: 服务器接收客户端提交的 ...
- [原创]java WEB学习笔记70:Struts2 学习之路-- 输入验证,声明式验证,声明是验证原理
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- struts2的validate输入验证
原创 struts2的输入验证有两种方式: 使用validate()方法实现验证 使用验证文件实现验证 下面通过一个例子介绍validate()方法验证——实现客户注册输入验证 设计的JSP页面代码: ...
- Struts2入门(四)——数据输入验证
一.前言 1.1.什么是输入验证?为什么需要输入验证? 在上一篇文章中,我们学习了数据类型转换,我们提到了表示层数据处理的两个方法,也提到了用户输入数据需要进行类型转换才能得到我们想要的数据,那么,我 ...
- struts2输入验证
1.方法 ① 基于Annotations的验证 ②基于XML配置的验证 http://blog.csdn.net/furongkang/article/details/692204 ...
- struts2系列(二):struts2参数传递错误、struts2的输入错误验证
一.struts2参数传递错误 1. 基本数据类型的传递最好使用包装类,原因是struts 2.1之后使用基本数据类型如果参数为空会报错2. 日期参数的传递最好定义一个区域的属性(定义locale), ...
- Struts2的输入校验(1)——校验规则文件的编写
Struts2的输入校验(1) --校验规则文件的编写 Struts2提供了基于验证框架的输入校验,所有的输入校验只要编写配置文件,Struts2的验证框架将会负责进行服务器校验和客户端校验. 注: ...
- Struts2框架(8)---Struts2的输入校验
Struts2的输入校验 在我们项目实际开发中在数据校验时,分为两种,一种是前端校验,一种是服务器校验: 客户端校验:主要是通过jsp写js脚本,它的优点很明显,就是输入错误的话提醒比较及时,能够减轻 ...
- JavaWeb框架_Struts2_(六)----->Struts2的输入校验
1. 输入校验章节目录 输入校验概述 客户端校验 服务器端校验 手动编程校验 重写validate方法 重写validateXxx()方法 输入校验流程 校验框架校验 Struts2 内置的校验器 常 ...
随机推荐
- Struts2+JSON+JQUERY DEMO
看到别人用了Struts2和JSON,自己也想练练手.记录下练习过程中遇到的问题,以便参考. 使用Maven新建项目: 先挂上pom.xml <project xmlns="http: ...
- 【POJ】3523 The Morning after Halloween
1. 题目描述$m \times n$的迷宫(最大为$16 \times 16$)包含最多3个点,这些点可以同时向相邻方向移动或保持停止,使用小写字母表示起始位置,使用大写字母表示中止位置.求最少经过 ...
- POJ 2455 - Secret Milking Machine
原题地址:http://poj.org/problem?id=2455 题目大意:给出一个N个点的无向图,中间有P条边,要求找出从1到n的T条通路,满足它们之间没有公共边,并使得这些通路中经过的最长的 ...
- Instruments-查看收集到的数据
由于Xcode调试工具Instruments指南篇幅太长,所以本篇blog继续上篇,介绍对Instruments收集到的数据去分析. 关于数据分析 Instruments不解决你代码中的任何问题,它帮 ...
- tkprof 解释
使用 tkprof 工具 tkprof orcl_ora_3048_安庆怀宁.trc 安徽安庆怀宁.txt sys=no aggregate=yes sys=no waits=yes sort=fc ...
- 《C++ Primer 4th》读书笔记 第4章-数组和指针
原创文章,转载请注明出处: http://www.cnblogs.com/DayByDay/p/3911573.html
- Android 使用库项目时的一个特殊tip
前提: 项目A作为库项目被项目B引用,但是项目A中有自定义的控件和自定义的属性,当在项目B中使用自定义的属性时,编译时就会直接报错:No resource identifier found for a ...
- geusture for chrome cfg
{ "name": "Chrome Gestures", "version": "1.13.4", "norm ...
- binlog/relay_log的清理
http://www.yuminstall.com/how-to-remove-mysql-relay-log.html CHANGE MASTER TO changes the parameters ...
- poj 4052(ac自动机)
题意:自己百度吧!! 分析:就是通过它的fail指针来找出它的子串就行了,这题其实不难的.这好像还是金华邀请赛的题哦! 代码实现: #include<cstdio> #include< ...