posts - 495,comments - 227,trackbacks - 0

javascript 支持

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

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

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

<html:form action="<%=action%>" method="post" onsubmit="return validateEditForm(this);">

-          html:form 内部块中添加: <html:javascript formName="editForm"/>

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

使用注意

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

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

formbean 被不同的 action 使用时,对于不同的 action 而言,使用的 formbean 的属性集合有大有小。此时如果仍然以 formbean 为主体,会造成其他 action 的不正常使用。因此, struts 中提出了 DynaValidatorActionForm ValidatorActionForm )。此时在 validation.xml 中的 form 标签的 name 属性改为 action path 属性,又由于 action 中有 attribute name 属性, 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.1 DispatchAction 使得相关的 Action 的关系紧密,大大减少了应用中 Action 的个数,但是随之而来也带来了使用 Validation 框架的不便,不能不说是一个遗憾。读者也许认为这种情况可以使用第 2 条的解决方案来解决,即采用 DyanValidatorActionForm ,然后在 Validation.xml 文件中 form 的名称使用不同的 Actiond path ,即在 validation.xml 中使用: <form name="/user.do?method=doAdd">     <form name="/user.do?method=doLoad"> 。然而,在目前的版本中 Validation 框架并不支持这种辨认。一种绕过这个情况的方法是,针对同一个 Action 实现类在 Struts-config.xml 文件中定义多个 Action path ,在不需要进行验证的地方将 Action validate 属性置为 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.xml validator-rules.xml 会随之增长,这部分的维护工作加重了。

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

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

参考资料

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

n         http://otn.oracle.com/oramag/oracle/04-jan/o14dev_struts.html Check 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

posted on 2006-08-17 19:51 SIMONE 阅读(662) 评论(0)  编辑  收藏 所属分类: struts

只有注册用户登录后才能发表评论。


网站导航: