validator验证框架之理解

看了别人写的那么多文章,自己也手痒痒,所以决定也写一点.谈谈最近学struts遇到的验证框架.

验证框架的使用需要实现这几步:

1.导包 当然这在struts中已经带上了

2.编写Actionfrom类 注意 这里不是继承ActionForm 而是继承ValidatorForm或ValidatorActionForm
其中的Validate方法要去掉 因为在ValidatorForm或ValidatorActionForm 中已经实现了这个方法

3. 在struts-config中配置Form 和 action

4.在Validate.xml中配置验证字段

5.写资源包

下面我就说说其中的具体实现:
一.Validator主要依赖两个jar包

Jakarta-oro.jar:-提供一组处理文本的类,具有文本替换、过滤、和分割功能。
Commons-validator.jar:提供了一个简单、可扩展的验证框架,包含了通用的验证方法和验证规则。

二.validation.xml,validator-rules.xml

Validator采用基于两个xml文件的方式来配置验证规则,分别为validation.xml,validator-rules.xml。
在struts应用中,需放到web-inf目录下。
1.validator-rules.xml
这个文件包含了一组验证规则,对所有struts应用都适用。一般情况不用修改这个文件,
除非要修改或扩展默认规则。如果要给应放到另一个xml文件中,而不是直接添加到validator-rules.xml文件中,
这样当Validator升级时,不用修改validator-rules.xml文件。
2.validator.xml文件
这个文件是针对于具体struts应用的,他可以为应用中的ActionForm配置验证规则。
而不用编码实现验证。
例如一个验证登陆form的例子,要求用户名必须填写,秘密要求必填、最大、最小长度
<form-validation>
<global>
<!-- 密码由数字、26个英文字母或者下划线组成的字符串 -->
<constant>
<constant-name>pwd</constant-name>
<onstant-value>^\w+$</onstant-value>
</constant>
</global>
<formset>
<form name="loginForm">
<!-- 这里的用户名使用邮箱,验证时使用正则表达式进行验证 -->
<field property="user.userId" depends="required">
<arg0 key="user.userId" />
</field>
<field property="user.userPwd" depends="required,minlength,maxlength,mask">
<!-- msg name="mask" key="errors.invalid" /-->
<arg0 key="user.userPwd" />
<arg1 name="minlength" key="${var:minlength}" resource="false" />
<arg2 name="maxlength" key="${var:maxlength}" resource="false" />
<var>
<var-name>mask</var-name>
<var-value>^\w+$</var-value>
</var>
<var>
<var-name>minlength</var-name>
<var-value>6</var-value>
</var>
<var>
<var-name>maxlength</var-name>
<var-value>20</var-value>
</var>
</field>
</form>
</formset>
</form-validation>
三.Validator插件
为了在struts中用validator,可以用插件方式加载Validator框架,
需在struts配置文件中配置ValidatorPlugIn插件,同时写明两个xml文件的路径。
应用启动时,Strust会加载这个插件,并调用他的init()方法,init()
方法根据pathnames加载相应的validator-xml,validator.xml文件,把验证信息读入到内存中。
代码:(一般的IDE工具能自动生成)
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"
property="pathnames" />
</plug-in>
四.Validator和ActionForm
Validator框架不能直接org.apache.struts.action.ActionForm。应采用ActionForm的两个子类
ValidatorActionForm和ValidatorForm

DynaValidatorActionFrom继承自DynaValidatorForm

支持动态在ActionFrom中使用Validator框架
ValidatorFormActionForm继承自ValidatorForm
支持在标准ActionForm中使用Validator框架。

DynaValidtaorForom和ValidatorForm类都实现了validator()方法,如果验证失败,
就会返回包含错误消息的ActionMessage对象,并把该对象添加到ActionErrors集合对象中,
由validator方法最后返回ActionErrors对象。
ValidatorForm有一个子类ValidatorActionForm
两者的具体用法如下:
ValidatorForm (用在同一个form在修改和注册模块中验证相同的属性)
Strust配置文件的<action>元素的name属------>validator.xml文件<form>元素的name属性
例如:
<action input="/login.jsp" name="loginActionForm" path="/loginAction" scope="request" type="validatetest.action.LoginAction" />
<formset>
<form name="loginActionForm">
<field property="userName" depends="required">
<arg key="error.username"/>
</field>
</form>
</formset>

ValidatorActionForm(用在注册和登录模块使用同一个form但是验证的属性有多有少 不一样的情况)
Strust配置文件的<action>元素的path属------>validator.xml文件<form>元素的name属性
例如:
<action input="/login.jsp" name="loginActionForm" path="/userAction1" scope="request" type="validatetest.action.LoginAction" />
<action input="/login.jsp" name="loginActionForm" path="/userAction2" scope="request" type="validatetest.action.LoginAction" />
用的同一个Form 但是验证的属性不同(注意path中的"/"一定要带着)
<formset>
<form name="/userAction1">
<field property="user.userName" depends="required">
<arg key="error.username"/>
</field>
</form>
<form name="/userAction2">
<field property="user.userPwd" depends="required">
<arg key="error.username"/>
</field>
</form>
</formset>
Validator框架提供这两个类目的在于可以更加精确的控制执行验证的条件。


而DynaValidatorForm和DynaValidatorActionForm,区别和ValidatorFrom和ValidatorActionForm的区别一样

在validator框架中使用JavaScript
需要在验证的页面中加入<html:javascript formName="/userAction1"/>注意formName是validator.xml中的<form name="/userAction1">

对需要验证的表单定义onsubmit事件 return方法 为 validate+form名 可以在jsp页面中查看源代码获得
<html:form action="userAction1" method="post" οnsubmit="return validateUserForm(this)">

五 把需要验证的内容写到 资源包中
如:
error.user=username is required
error.pwd=userPwd is required
error.username=userName
error.password=password
error.age=age

以下直接从validator-rules.xml文件中拷过来
# Struts Validator Error Messages
errors.required={0} is required.
errors.minlength={0} can not be less than {1} characters.
errors.maxlength={0} can not be greater than {1} characters.
errors.invalid={0} is invalid.

errors.byte={0} must be a byte.
errors.short={0} must be a short.
errors.integer={0} must be an integer.
errors.long={0} must be a long.
errors.float={0} must be a float.
errors.double={0} must be a double.

errors.date={0} is not a date.
errors.range={0} is not in the range {1} through {2}.
errors.creditcard={0} is an invalid credit card number.
errors.email={0} is an invalid e-mail address.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值