Struts Validation框架浅尝

上一篇 / 下一篇  2007-01-04 11:43:04 / 个人分类:J2EE开发

javascrīpt支持

      web应用中,使用javascrīpt的机会非常多。虽然不少书上提及客户有可能从浏览器关闭js的执行,但是要想完全的不使用它,目前看来好像还不行。比如一些复杂的UI是必须通过js来实现的(如下拉式菜单等等)。那么validation框架支不支持客户端的js验证呢?

答案是:当然。具体做法是:

-         在页面html:form标签内部添加onsubmit=return validateEditform(this);(具体的语法:validate+validation.xml文件中定义的form的名字);如:

<html:form action=<%=action%> method=postōnsubmit=return validateEditform(this);>

-         html:form内部块中添加:<html:javascrīpt formName=editform/>

      如此2步即可。虽然,validation框架非常简单易用,但是还是有需要注意的地方。

使用注意

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=/username=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=/loadusername=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会随之增长,这部分的维护工作加重了。

      同时,由于不能非常好的和DispatchAction一起协作,也使得大量使用DispatchAction的项目不能非常好的使用它。建议大量使用DispatchAction和页面验证非常复杂多变的项目可以暂时按原来的方法来验证,不使用validation框架。

      至于validation框架的其他详细信息,请参见struts的文档,在此不再赘述。

参考资料

n        http://raibledesigns.com/wiki/Wiki.jsp?page=SecuringDispatchActionDispatchActionvalidation框架的协作解决方案来源于此。

n        http://otn.oracle.com/oramag/oracle/04-jan/o14dev_struts.htmlCheck Your form with Validator

n        http://www-900.ibm.com/developerWorks/cn/java/l-struts1-1/深入Struts 1.1

n        http://javaboutique.internet.com/tutorials/Struts11Val/Stepping through the Struts 1.1 Validator


TAG: J2EE开发

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

数据统计

  • 访问量: 7628
  • 日志数: 15
  • 建立时间: 2006-12-07
  • 更新时间: 2007-01-11

RSS订阅

Open Toolbar