validator框架 validate方法

时间:2025-03-12 08:53:55

validator框架 validate方法 ActionForm/ValidatorForm/ValidatorActionForm struts 1.3为例

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

不同点:

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

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

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

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

 

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

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


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

文件配置如下:
<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 = (mapping, request);这句代码是启用Validate框架所要做的工作,然后可以判断errors再作下一步的处理。

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

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

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

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

==================================================================================
formset 可以含有language, country 等属性对应 class
formset 配置:
   form name:对应的表单name,必须与<html:javascript> 中formName属性以及struts-config中ActionForm名称相同。
<field property="username" //property是字段名称,对应ActionForm属性
depends="required, minlength,maxlength,idcard">   //depends是中的规则名称name
                <arg0   key=""/> //错误信息参数,错误信息文件由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>