struts数据校验
一、数据校验分为两种类型
1、客户端校验;2、服务端校验。客户端的数据校验一般是在HTML页面中使用JavaScript校验。
二、服务端校验有三种
1、使用业务逻辑处理方法校验,即在execute()中添加校验代码,缺点是:a、校验代码和业务逻辑代码混合,程序的可读性差,增加维护难度;b、必须显示指明出错时的结果;
2、使用validate或validateXxx方法校验。优点:a、校验代码和业务逻辑代码分开,程序的可读性和维护性都较好;b、校验出错,自动跳转到input结果。缺点:a、当校验代码比较多时,会使得validate()程序很臃肿,对管理和维护增加难度。
3、使用Struts2校验框架校验(xwork)。Struts2校验框架的校验有两种校验配置:字段校验和非字段校验。二者的区别:
非字段校验:先指定校验器:由谁来校验,来校验谁!
字段校验器:先指定校验的属性:我来校验谁,由谁来校验!
三、字段校验实验步骤
1、创建Struts2项目。(不会的请看http://www.cnblogs.com/yexiaodong/p/3585050.html)
2、创建动作类RegisterAction,包括的成员变量有:userName(String)、password(String)、repassword(String)、birthday(Date)和email(String)。
3、创建两个JSP页面,分别用于输入用户的名字、密码、确认密码、年龄、生日和email的注册页面以及用于显示用户注册时输入的合法信息的页面,保存目录为WebRoot
4、编写动作类资源属性文件RegisterAction.properties(该文件跟动作类保存在同一个包下就行了,不需要额外的配置)
5、创建xml校验配置文件,要求对注册页面中的表单域进行如下校验:
a、用户名:不许为空,而且长度在2至6之间
b、密码:不允许为空,且必须是字母或数字,同时长度必须在4~15之间
c、确认密码:必须和密码一致
d、年龄:必须是整数,且必须在1~150之间
f、生日:必须是日期类型,且必须在1980-01-01和2011-01-01之间
g、Email:必须符合email格式
四、核心代码:
RegisterAction-validation.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"> <!-- 项目名称:javaII-6 包名:com.sise.ye.action 文件名:RegisterAction-validation 创建人:叶晓东 创建时间:2014.4.7 描述:注册页面的校验 备注: @version 1.0 --> <validators> <!-- 用户名 --> <field name="userName"> <field-validator type="requiredstring"> <message key="errors.name.requiredstring"/> </field-validator> <field-validator type="stringlength"> <param name="minLength">2</param> <param name="maxLength">6</param> <message key="errors.namelength"/> </field-validator> </field> <!-- 密码 --> <field name="password"> <field-validator type="requiredstring"> <message key="errors.password.requiredstring"/> </field-validator> <field-validator type="regex"> <param name="regexExpression"><![CDATA[(\w{4,15})]]></param> <message key="errors.password"/> </field-validator> </field> <!-- 确认密码 --> <field name="repassword"> <field-validator type="requiredstring" short-circuit="true"> <message key="errors.password.requiredstring"></message> </field-validator> <field-validator type="fieldexpression"> <param name="expression"><![CDATA[password==repassword]]></param> <message key="errors.passwordequals"></message> </field-validator> </field> <!-- 年龄 --> <field name="age"> <field-validator type="int"> <param name="min">1</param> <param name="max">150</param> <message key="errors.age"/> </field-validator> </field> <!-- 出生年月 --> <field name="birthday"> <!-- <field-validator type="requiredstring"> <message key="errors.birthday.required"/> </field-validator> --> <field-validator type="date"> <param name="min">1980-01-01</param> <param name="max">2011-01-01</param> <message key="errors.birthday"/> </field-validator> </field> <!-- email --> <field name="email"> <field-validator type="requiredstring"> <message key="errors.email.required"></message> </field-validator> <field-validator type="email"> <message key="errors.email"/> </field-validator> </field> </validators>
代码分析:
<validators>为根元素,所有的校验都放在里面。
<field>中的属性name设置了校验的属性,里面放在该属性的规则
<field-validator>中的属性type设置了校验器
<param>指定校验过程中使用到的参数
<message>校验不成功返回时的提示,国际化或有配置文件时使用key属性。
RegisterAction.properties
五、总结
数据校验的时候如果是使用正则表达式需要注意2.3.16这个版本中的参数名作了修改,不是"expression",而是"regexExpression"。
六、代码下载
http://download.csdn.net/detail/yy228313/7160501