您的位置:首页 > 编程语言 > Java开发

Struts-Validator验证框架。

2009-12-04 16:04 423 查看
今天学习了Validator。前几次课学习了ActionForm 里面有一个方法是 validate();此方法可以在里面进行写验证代码。但是缺点就是如果我有很多ActionForm那岂不是要写死人。所以动态form(DynaActionForm)就出现了.但是要基于动态form验证。就有些麻烦了。

Validator由David Winterfeldt 创建,它能比内集成到Struts框架中。主要负责数据的验证。其实验证代码不用写。就是配置多。

先聊聊使用Validator的好处。

1 可以在一处为程序定义一套完整的验证规则;

2 如果要修改或者定义新验证比较简单。

3 支持国际化

4 支持正则表达式

5 可以应用于WEB程序也可以英语于JAVA应用程序;

6 还有就是validator支持可插性(plugbability)

验证框架 validatorFrameWordk
原理 是把一些常用的验证规则 (validator-rules.xml) 固定下来
通过 XML文件(validation.xml)的配置 来指定哪个ActioniForm的 哪个属性 使用什么样的验证规则

步骤:

1 配置struts-config.xml 文件 让struts框架能够识别出验证框架
2 创建动态Form 换成 DynaValidatorForm 类 因为该类才会使用验证框架做验证
3 编写 validation.xml 文件 配置自己的验证规则

下来就行是我的作业:

还是很简单的验证。字段 用户名、密码 、年龄、邮箱

然后对这几个字段进行验证。

首先配置struts-config.xml 让struts认识你的框架

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
/WEB-INF/validation.xml" />
</plug-in>


2 创建动态form

<form-bean name="regUserForm" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="username" type="java.lang.String" />
<form-property name="userpwd" type="java.lang.String" />
<form-property name="userage" type="java.lang.String" />
<form-property name="useremail" type="java.lang.String" />
<form-property name="userpwds" type="java.lang.String" />
</form-bean>


注意org.apache.struts.validator.DynaValidatorForm

3 在WEB-INF下面创建3 validation.xml

<form-validation>

<formset>
<form name="regUserForm">
<field property="username" depends="required">
<arg name="required" position="0" resource="true" key="username"></arg>
</field>

<field property="userpwd" depends="required,minlength,maxlength">
<arg name="required" position="0" resource="true" key="userpwd"></arg>
<arg name="minlength" position="1" resource="false" key="6"></arg>
<arg name="maxlength" position="0" resource="true" key="userpwd"></arg>
<arg name="maxlength" position="1" resource="false" key="8"></arg>
<var>
<var-name>minlength</var-name>
<var-value>6</var-value>
</var>
<var>
<var-name>maxlength</var-name>
<var-value>8</var-value>
</var>
</field>
<field property="userpwds" depends="validwhen">
<msg name="validwhen" resource="true" key="userpwds" />
<var>
<var-name>test</var-name>
<var-value>(userpwds==userpwd)</var-value>
</var>
</field>
<field property="userage" depends="intRange">
<arg name="intRange" position="0" key="userage"></arg>
<arg name="intRange" position="1" resource="false" key="${var:min}"></arg>
<arg name="intRange" position="2" resource="false" key="${var:max}"></arg>
<var>
<var-name>min</var-name>
<var-value>18</var-value>
</var>
<var>
<var-name>max</var-name>
<var-value>35</var-value>
</var>
</field>
<field property="useremail" depends="email,required">
<arg name="required" position="0" resource="true" key="email"></arg>
<arg name="email" position="0" key="email" resource="true"></arg>
</field>
</form>
</formset>
</form-validation>


validator-rules.xml文件

validator-rules.xml文件定义应用程序可以使用的Validator。validator-rules.xml充当模板的作用,定义所有应用程序可能要用到的Validator。

下来解释一下里面的元素

validator默认有14中规则。这写规则被称为validator框架的基本规则

名称描述
byte,short,integer,long,float,double 检验值是否能被转换成对应的基本数据类型
creditCard检验输入域是否是一个合法的信用卡号码
date 检验输入域是否是一个合法日期
email检验输入是否是一个合法Email地址
mask检验输入域是否能成功匹配一个正则表达式
maxLength 检验值的长度是否小于等于给定的最大长度
minLength检验值的长度是否大于等于给定的最小长度
range 检验值的范围是否在最大值和最小值之间
required 检验输入域是否为不为空,或不包含空格值的长度是否大于零
1 formset

有属性 language和country

有元素constant 和form

2 form

有属性 name 这个name要和你的dynaVdlidtorForm名字相同

有元素 field

3 field

有属性 depends 这里面的值要对应“validator-rules.xml文件 ”的基本规则名

property对应表单dynaVdlidtorForm里面属性的名字

有元素 arg msg

4 arg

有属性 name 对应 depends key对应的是消息文本也就是资源文件里面的键

resource 意思是是否从资源文件里面找这个对应的key

position 对应资源文件里面得序列值

5 msg

有属性 name 对应 depends key对应的是消息文本也就是资源文件里面的键

有属性 name 对应 depends key对应的是消息文本也就是资源文件里面的键

resource默认为true

position 对应资源文件里面得序列值

6 var

里面有两个元素 一个是 var-name var-value 设置参数的值。或者规则表达式

框架客户端验证(javascript)页面

<html:javascript formName="registForm"/>

<html:form action="regist.do" onsubmit="return validateRegistForm(this)">

但是郁闷的是页面天出



都是英文提示。很显然。在资源文件里面消息提示都是英文。那么要用国际化讲这些消息转化为utf-8

用到JDK自带的转码工具 native2ascii.exe 然后打开它输入你要提示的中文 转码后

errors.required={0} /u4e0d/u80fd/u4e3a/u7a7a

errors.minlength={0} /u4e0d/u80fd/u5c11/u4e8e {1} /u4e2a/u5b57/u7b26

但是要一个一个进行转码很麻烦 。当然可以尝试第二种将整个资源文件全部转码 具体是这样的

进入CMD 进入你资源文件所在的目录盘符 E: 然后打开 cd 资源文件路径 然后输入 native2ascii.exe encoding utf-8 资源名 别名 转码成功后如下:

errors.maxlength={0} /u4e0d/u80fd/u5927/u4e8e {1} /u4e2a/u5b57/u7b26

errors.invalid={0} /u662f/u975e/u6cd5/u7684

errors.validwhen={0} /u4e0e {1} /u4e0d/u5339/u914d

errors.date={0} /u4e0d/u7b26/u5408/u65e5/u671f/u683c/u5f0f

errors.email={0} /u4e0d/u662f/u5408/u6cd5/u7684/u7535/u5b50/u90ae/u7bb1

emp.username=/u7528/u6237/u540d

emp.password=/u5bc6/u7801

emp.repassword=/u786e/u8ba4/u5bc6/u7801

emp.birthday=/u51fa/u751f/u65e5/u671f

emp.email=/u7535/u5b50/u90ae/u7bb1

emp.mobile=/u624b/u673a/u53f7

结束了。交作业。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: