struts2:数据校验,通过XWork校验框架实现(validation.xml)
根据输入校验的处理场所的不同,可以将输入校验分为客户端校验和服务器端校验两种。服务器端验证目前有两种方式:
第一种:
参考:struts2:数据校验,通过Action中的validate()方法实现校验,图解
第二种:
使用validate()方法校验时,如果Web应用中存在大量Action就需要多次重写validate()方法,这使得代码非常繁琐。由于Struts2的校验框架本质上是基于XWork的validato框架,因此可以使用XWork的validator框架来对Struts2进行数据校验,以减少代码量。本文即讨论此种校验方式。
1. 前台页面加入错误提示标签(registerX.jsp)
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page isELIgnored="false"%>
<%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<s:fielderror/>
<s:form action="registerX" method="post">
账号:<s:textfield name="username"></s:textfield>
<br/>
密码:<s:password name="password"></s:password>
<br/>
重复密码:<s:password name="repassword"></s:password>
<br/>
年龄:<s:textfield name="age"></s:textfield>
<br/>
身高:<s:textfield name="height"></s:textfield>
<br/>
<s:submit value="提交"></s:submit>
<br/>
</s:form>
</body>
</html>
2. 后台action继承ActionSupport(RegisterXAction.java)
package com.clzhang.ssh.demo1;
import com.opensymphony.xwork2.ActionSupport;
public class RegisterXAction extends ActionSupport {
public static final long serialVersionUID = 1;
private String username;
private String password;
private String repassword;
private Integer age;
private Double height;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRepassword() {
return repassword;
}
public void setRepassword(String repassword) {
this.repassword = repassword;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Double getHeight() {
return height;
}
public void setHeight(Double height) {
this.height = height;
}
@Override
public String execute() {
System.out.println(username + "|" + age + "|" + height + " register finished!");
return "register";
}
}
3. 增加校验配置文件(RegisterXAction-validation.xml)
3.1 命名规范
校验文件命名规则:ActionName-validation.xml,其中ActionName就是需要校验的action的类名。
如果需要在Action中对某个特定的方法进行校验,则需要为此特定方法专门定义一个校验文件(否则,调用默认的)。该文件命名规则为:actionNme-methodNae-validation.xml;同时,还需要在struts.xml文件配置action时指定其method属性(否则,调用默认的)。
3.2 位置规范
该文件应该与action类的文件位于同一个路径下。
3.3 该文件的定义
参考:struts-2.3.x\lib\xwork-core-2.3.x.jar包中xwork-validator-1.0.x.dtd文件的描述。
3.4 该文件中validator的种类
参考:xwork-core-2.3.x.jar\com\opensymphony\xwork2\validator\validators中的default.xml文件。
3.5 进行数据校验遵循的步骤
- Struts2框架中的类型转换器对HTTP请求的数据进行数据类型转换,得到符合类型的值,比如本例中age被转换为int。
- 使用Struts2的XWork校验框架进行校验,即根据actionName-validation.xml文件和actionName-methodName-validation.xml文件校验数据。
- 调用validateX()方法来进行数据校验。
- 调用validate()方法进行数据校验。
- 如果数据校验发生错误,就会返回名为input的result,进入指定的视图资源而不会调用本该被调用的业务逻辑处理方法。如果数据校验过程中未出现错误,则会调用相应Action中的业务逻辑处理方法。
3.6 配置校验文件的方式
Struts2框架提供了两种方式来配置校验文件,一种是字段校验配置方式;另一种是非字段校验配置方式。
字段校验方式(field-validator)
<!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="username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>请输入用户名</message>
</field-validator> <field-validator type="stringlength">
<param name="minLength">2</param>
<param name="maxLength">16</param>
<message>用户名长度在${minLength}到${maxLength}位之间!</message>
</field-validator>
</field> <field name="password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>请输入密码</message>
</field-validator> <field-validator type="regex">
<param name="expression"><![CDATA[\w{6,12}]]></param>
<message>密码必须在6-12位之间,且只能为字母和数字</message>
</field-validator>
</field> <field name="repassword">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>请输入确认密码</message>
</field-validator> <field-validator type="fieldexpression">
<param name="expression"><![CDATA[repassword==password]]></param> <!--这里也可以用repassword.equals(password)//-->
<message>两次密码不相等</message>
</field-validator>
</field> <field name="age">
<field-validator type="required">
<param name="trim">true</param>
<message>年龄不能为空!</message>
</field-validator> <field-validator type="int">
<param name="min">1</param>
<param name="max">60</param>
<message>年龄取值范围在${min}到${max}之间</message>
</field-validator>
</field> <field name="height">
<field-validator type="double">
<param name="min">1.10</param>
<param name="max">2.10</param>
<message>身高取值范围在${min}到${max}米之间</message>
</field-validator>
</field>
</validators>
非字段校验方式(non-fild validator),下面这个只是个示范,非本例所用。
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators>
<!-- age域 -->
<field name="age">
<!--域类型为int-->
<field-validator type="int">
<param name="min">10</param>
<param name="max">40</param>
<message>the age must be from 10 to 40!</message>
</field-validator>
</field>
<!-- name域 -->
<field name="name">
<!-- 域类型为requiredstring类型 -->
<field-validator type="requiredstring">
<message>the age must be from 10 to 40!</message>
</field-validator>
</field>
</validators>
3.7 校验器简介
- required校验器,要求字段非空;
- requiredstring校验器,要求字段值非空且长度大于0;
- int校验器,表示整数,可以通过min/max参数指定范围;
- date校验器,要求日期,可以通过min/max参数指定范围;
- email校验器,要求电子邮件格式;
- stringlength校验器,通过minLength/maxLength参数指定字段长度范围。
4. 在struts.xml文件中配置错误返回页面地址
<action name="registerX" class="com.clzhang.ssh.demo1.RegisterXAction">
<result name="register">/ssh/demo1/success.jsp</result>
<result name="input">/ssh/demo1/registerX.jsp</result>
</action>
5. 测试
打开IE,输入地址:http://127.0.0.1:8080/st/ssh/demo1/registerX.jsp
结果如下:

直接提交,结果如下:

struts2:数据校验,通过XWork校验框架实现(validation.xml)的更多相关文章
- struts2 数据校验
通过struts2中延续自xwork框架的validation.xml配置方式进行数据校验,因struts2 下存在三种请求参数的注入方式,固按照不同注入方式对validation.xml的配置进行总 ...
- (转)struts2:数据校验,通过XWork校验框架实现(validation.xml)
转载自:http://www.cnblogs.com/nayitian/p/3475661.html struts2:数据校验,通过XWork校验框架实现(validation.xml) 根据输入 ...
- struts2学习笔记--使用Validator校验数据
我们在进行一些操作是需要对用户的输入数据进行验证,比如网站的注册,需要对各个数据项进行数据校验,Struts2提供了一些默认的校验器,比如数字的检测,邮箱的检测,字符串长度的检测等等. 常用的Vali ...
- struts2 之 struts2数据校验
1. 数据校验一般分为2类:前端的校验(js校验),后端的校验(java代码):实际开发中大部分情况下都是采用js校验.在对数据安全要求较高的情况下可能会采用后端验证. 2. Struts2提供了后 ...
- Struts2数据校验
Struts2数据校验 1.常见数据校验方法 表单数据的校验方式: 表单中的数据必须被效验以后才能够被使用,常用的效验方式分为两种: 前台校验:也称之为客户端效验,主要是通过JS编程的方式进行表单数据 ...
- struts2数据校验与国际化
数据校验: Action里的validate()方法能校验action类所有的方法,如果有错,如:addFieldError,会自动返回到workflow校验拦截器不向下继续进行,不用return i ...
- struts2使用验证文件实现校验
原创 struts2框架提供了一种基于验证文件的输入验证方式,将验证规则保存在特定的验证文件中. 验证文件的命名规则 一般情况下,验证文件的命名规则是:Action类名-validation.xml. ...
- Hadoop基础-HDFS数据清理过程之校验过程代码分析
Hadoop基础-HDFS数据清理过程之校验过程代码分析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想称为一名高级大数据开发工程师,不但需要了解hadoop内部的运行机制,还需 ...
- 用C#实现的几种常用数据校验方法整理(CRC校验;LRC校验;BCC校验;累加和校验)
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错 ...
随机推荐
- BZOJ4117 : [Wf2015]Weather Report
一种天气情况的概率只与4种天气的出现次数有关,故将相同概率的情况计数后放入堆中模拟哈夫曼树即可. 每次取出概率最小的,将它个数除以2,对于零头需要特判. #include<cstdio> ...
- NOIP欢乐模拟赛 T1 解题报告
小澳的方阵 (matrix.cpp/c/pas) [题目描述] 小澳最近迷上了考古,他发现秦始皇的兵马俑布局十分有特点,热爱钻研的小澳打算在电脑上还原这个伟大的布局. 他努力钻研,发现秦始皇布置兵马俑 ...
- SQL2043N 与 linux的randomize_va_space特性
自从数据库服务器从redhat4.6升级到redhat5.5之后,在使用TSM备份的时候偶尔会出现SQL2043N 查看错误: [db2inst1@limt ~]$ db2 ? SQL2043N S ...
- LINQ to Entities 和LINQ to Objects 的区别
本文资料来源:http://www.codeproject.com/Articles/246861/LINQ-to-Entities-Basic-Concepts-and-Features) LINQ ...
- 去掉inline-block元素默认间距的几种方法
方法1:使用负margin值一般是-3px,部分浏览器可能不同,不太推荐使用. 方法2:去掉多余空格将元素紧挨着写去掉多余空格,但降低了可读性. 方法3:使用font-size:0在外层父元素加上fo ...
- 深入浅出 - Android系统移植与平台开发(三)- 编译并运行Android4.0模拟器
作者:唐老师,华清远见嵌入式学院讲师. 1. 编译Android模拟器 在Ubuntu下,我们可以在源码里编译出自己的模拟器及SDK等编译工具,当然这个和在windows里下载的看起来没有什么区别 ...
- RSA_RSA算法原理(二)
上一次,我介绍了一些数论知识. 有了这些知识,我们就可以看懂RSA算法.这是目前地球上最重要的加密算法. 六.密钥生成的步骤 我们通过一个例子,来理解RSA算法.假设爱丽丝要与鲍勃进行加密通信,她该怎 ...
- php 实现推技术comet(转)
实现实时通信一般有两种方式:socket或comet.socket是比较好的解决方案,问题在于不是所有的浏览器都兼容,服务器端实现起来也稍微有点麻烦.相比之下,comet(基于HTTP长连接的&quo ...
- java web(一) 使用sql标签库+tomcat+mysql手动创建一个jsp练习总结
2016-09-0111:06:53 使用sql标签库+tomcat+mysql手动创建一个jsp 1. 1.1安装tomcat ...
- .net 文件下载【转】
方式一:TransmitFile实现下载.将指定的文件直接写入 HTTP 响应输出流,而不在内存中缓冲该文件. protected void Button1_Click(object send ...