通通透透理解validator框架和validate方法关系

validate方法有三种来源,分别继承自ActionForm, ValidatorForm, ValidatorActionForm

不同点:

(1).继承自ActionForm的FormBean,必须覆基类ActionForm的validate()方法,仅能做服务器端检验。需要在 struts config.xml中配置中,Action一定要将validate属性设置为validate="true“. 不是Struts Validator框架,也不需要配置文件信息。

(2).
 继承自ValidatorForm 或 ValidatorActionForm 的FormBean,是Struts Validator框架。可以做服务器端检验,也可以通过生成JavaScript的方式实现客户端检验。
(3).作为Struts Validator框架, 必须不能覆盖基类的validate()方法
 。即必须使用基类的validate()方法,才能保证错误验证正常进行。否则就会屏蔽掉在Validation.xml中定义的验证部分,在系统运行时,validation.xml里对应此FormBean定义的错误验证部分不执行。
(4).作为Struts Validator框架,需要validator.xml 和 validator-rules.xml 配置文件,无论是服务器还是客户端验证。服务器端验证:validate="true“。客户端验证:validate="false“
(5).ValidatorForm 和 ValidatorActionForm 的区别。

==================================================================================
一、在对应的Form Beans中重载validate方法

在struts-config.xml文件中,action节点下有“validate”这样一个属性。在struts框架中,默认属性是 validate=”true”。所以如果想通过Form Baens的重载validate方法来验证数据的话,可以不用理会这一点。题外话:如果你在struts-config.xml文件中,设置 validate="false"的话,validate方法将不起作用。这一点同样对Validate框架来验证数据起作用。



二、通过Validator框架来验证数据

1、配置struts-config.xml文件,增加:
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validations.xml"/>
</plug-in>
2、配置validation.xml文件
<formset>
<form name="userForm"> ----这里的userForm是Form Beans的名字
……
</formset>
以上是通过validatorForm- or DynaValidatorForm来实现Validate验证的


现在有这样一个问题,Form Beans可以被多个Action应用,而每个Action可能需要的验证字段都不一样。而在validation.xml中配置的验证方式(如< form name="userForm">)是对这个Form Beans进行的。于是,Form Beans可以继承ValidatorActionForm(当然可以直接配置DynaValidatorActionForm)。如下所示:

validation.xml文件配置如下:
<formset>
<form name="/technology/ createUser ">----这里的采用的是action的path路径
……
</formset>

三、结合上面的两种验证

如果即在Form Beans中重载了validate方法,又启用了Validate框架,那会是什么效果呢?

由于要启用Validate框架,FormBeans需要继承ValidatorForm,查看ValidatorForm的源代码,发现validate方法已经作了处理(真是为Validate框架所服务的)。

那么在Form Beans中重载了validate方法的话,就会覆盖原有ValidatorForm中对应的功能,所以如果想一起用的话,需要在Form Beans的validate方法中调用errors = super.validate(mapping, request);这句代码是启用Validate框架所要做的工作,然后可以判断errors再作下一步的处理。

当然也可以先做Form Beans中的validate方法,然后启用Validate框架,要看具体情况而定。

四、启用客户端验证
也是结合validation.xml来验证的

①在需要客户端验证的jsp中加上这么一句<html:javascript formName=" userForm "/> 
其中formName就是validation.xml中<form name="userForm">所对应的内容

②在<html:form中追加一个属性οnsubmit="return validateUserForm(this);"
它的语法为:return validate + struts-config.xml中定义的form-bean名称 + (this);
比如:追加οnsubmit="return validateUserForm(this);"

==================================================================================
formset 可以含有language, country 等属性对应java.util.Locale class
formset 配置:
form name:对应的表单name,必须与<html:javascript> 中formName属性以及struts-config中ActionForm名称相同。
<field property="username" //property是字段名称,对应ActionForm属性
depends="required, minlength,maxlength,idcard">   //depends是validator-rules.xml中的规则名称name
<arg0   key="prompt.username"/> //错误信息参数,错误信息文件由message-resources标签指示。参数最多4个
<arg1   key="${var:minlength}" name="minlength" resource="false"/>//resource=false说明直接以key的值作为值,而不到message-resources文 件中查找对应值
//var为下面定义的变量
<arg2   key="${var:maxlength}" name="maxlength" resource="false"/>
<arg3   key="${var:idcardlength}" name="idcard" resource="false"/>
<var>
<var-name>maxlength</var-name> //变量名
<var-value>16</var-value>//变量值
</var>
<var>
<var-name>minlength</var-name>
<var-value>3</var-value>
</var>
<var>
<var-name>idcardlength</var-name>
<var-value>15</var-value>
</var>
</field>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值