zoukankan      html  css  js  c++  java
  • 【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会随之增长,这部分的维护工作加重了。

  • 相关阅读:
    mysql ACID与四种隔离级别归纳总结
    python django查询12306火车票
    python json dumps与loads有可能犯的错误
    python出现UnicodeEncodeError有可能产生的另一个原因
    python安装新版本及pip
    Django添加防跨站请求伪造中间件
    python List的一些相关操作
    mysql中varbinary、binary、char、varchar异同
    (原创)如何使用boost.asio写一个简单的通信程序(一)
    (原创)用c++11实现简洁的ScopeGuard
  • 原文地址:https://www.cnblogs.com/coveted/p/1945782.html
Copyright © 2011-2022 走看看