【Struts1】DynaValidatorForm和DynaValidatorActionForm的区别

1.       使用validation框架后,form必须从ValidatorForm中派生,同时必须在你的validate方法中先调用基类的validate方法。对于使用Dyna开头的方法来创建formbean的读者,你也必须改为以dyna开 头含有validatorform

2.       注意DynaValidatorFormValidatorForm)和DynaValidatorActionFormValidatorActionForm)的区别。刚开始时从帮助中没看明白这2者的区别,后来从网上一篇文章中得到了用法的区别。前者主要的视角是formbean,而后者的视角是action

formbean被不同的action使用时,对于不同的action而言,使用的formbean的属性集合有大有小。此时 如果仍然以formbean为主体,会造成其他action的不正常使用。因此,struts中提出了DynaValidatorActionFormValidatorActionForm)。此时在validation.xml中的form标签的name属性改为actionpath属性,又由于action中有attributename属性,validation框架就可根据这个action得到对应的formbean。例子:

 

<formset>

<form name="/createAddress">

<field property="city"

depends
="required">

<arg0 key="prompt.city"/>

</field>

</form>

<form name="/editAddress">

<field property="state"

depends
="required">

<arg0 key="prompt.state"/>

</field>

</form>

</formset>



3.       DispatchAction的配合。Struts1.1DispatchAction使得相关的Action的关系紧密,大大减少了应用中Action的个数,但是随之而来 也带来了使用Validation框架的不便,不能不说是一个遗憾。读者也许认为这种情况可以使用第2条的解决方案来解决,即采用DyanValidatorActionForm,然后在Validation.xml文件中form的名称使用不同的Actiondpath, 即在validation.xml中使用:<form name="/user.do?method=doAdd">    <form name="/user.do?method=doLoad">。然而,在目前的版本中Validation框架并不支持这种辨认。一种绕过这个情况的方法是,针对同一个Action实现类在Struts-config.xml文件中定义多个Actionpath, 在不需要进行验证的地方将Actionvalidate属性置为false。即:

struts-config.xml

 

<action attribute="editForm" path="/user" name="editForm" input="/editUser.jsp"

parameter
="method" scope="request" type="foxgem.struts.UserDispatchAction"

validate
="true">

<forward name="load" path="/editUser.jsp"/>

<forward name="action" path="/userquery.do?pageId=1"/>

</action>



<action attribute="editForm" path="/loaduser" name="editForm" input="/editUser.jsp"

parameter
="method" scope="request" type="foxgem.struts.UserDispatchAction"

validate
="false">

<forward name="load" path="/editUser.jsp"/>

<forward name="action" path="/userquery.do?pageId=1"/>

</action>



然后在validation.xml文件中使用2的方法。

结束语

       总的说来,validation框架大大的提高了页面验证的开发效率,更吸引人的是这些验证方法可通过自定义的validator来得到复用。使得这些验证代码更加集中,可维护性得到加强。当然随着项目的进行,validation.xmlvalidator-rules.xml会随之增长,这部分的维护工作加重了。

posted @ 2011-01-26 21:09  liheping  Views(2033)  Comments(0Edit  收藏  举报