Struts Validation框架浅尝2

原创 2004年04月08日 18:53:00

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);"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

-          html:form内部块中添加:<html:javascript 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="/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会随之增长,这部分的维护工作加重了。

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

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

参考资料

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

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

关于作者

胡键,西安交通大学工学硕士,热衷于j2ee/.net技术,是OpenSource的忠实拥护者。目前与友人创建西安烁程软件有限公司。公司主要致力于java web应用的开发,已有多个项目在能源、电力和交通行业得到应用。可以通过james.hu@chinacodeline.com与他取得联系。

Struts Validation框架浅尝

早就听说Struts1.1中Validate框架的种种好处,这次借着项目采用了Struts,简单的研究了一下它的用法。在这个过程中体会到了它的好处,但是它也存在着一些小小的问题。在此一并写出与大伙分享...
  • samlover
  • samlover
  • 2004年12月22日 10:08
  • 960

Struts Validation框架浅尝1

Struts Validation框架浅尝 胡键(james.hu@chinacodeline.com)西安烁程软件有限公司2004年3月前言       早就听说Struts1.1中Validate...
  • foxgemm
  • foxgemm
  • 2004年04月08日 18:53
  • 3342

Struts2 使用Validation框架验证数据

在采用struts的xml配置方式校验数据时,发现怎么也不起作用。无法按照正常流程,走到input指向的页面。 一   问题的解决 很多博客说明了自己查找的方式,最后都指明了是因为配置文件...
  • haifeiyue
  • haifeiyue
  • 2015年12月06日 21:38
  • 338

Spring框架整合Struts2使用Validation框架验证表单用户输入数据的详细教程

Spring框架整合Struts2使用Validation框架验证表单用户输入数据的详细教程,代码下载地址:http://www.zuidaima.com/share/1778685765291008...
  • yaerfeng
  • yaerfeng
  • 2014年05月13日 09:45
  • 4787

struts验证Validation框架

【第1 步】建立Action类 public class ValidateAction extends ActionSupport {  private static final long s...
  • hutudanvip
  • hutudanvip
  • 2015年01月28日 23:16
  • 290

Struts2-第五篇-FormValidation

Form 验证 在这篇我们将探索用Struts2去验证用户的输入。有两种方式你可以用Struts2进行验证。这篇主要涉及基础的方法,在Action类中进行验证。 Add validate Meth...
  • TTS_Kevin
  • TTS_Kevin
  • 2014年01月23日 09:56
  • 617

Ajax validation with Struts 2

From: http://www.javaworld.com/javaworld/jw-10-2008/jw-10-struts2validation.html?page=1 Support for ...
  • dagouaofei
  • dagouaofei
  • 2010年06月25日 11:48
  • 2210

Struts 2 Validation

http://struts.apache.org/2.0.11.1/docs/validation.html
  • jessielee_yoyo
  • jessielee_yoyo
  • 2009年05月15日 09:44
  • 334

Struts中使用Validation框架

 (一)1:对于需要验证的每一个表单bean,在Validation.xml文件中添加一个新的标签。标签的name属性应该与表单bean的名字相同。2:对于表单bean中每一个需要验证的字段,需要添加...
  • hanyankai
  • hanyankai
  • 2009年11月27日 22:20
  • 307

Struts2框架的两个核心

struts.xml和struts.properties     其中struts.xml文件主要负责管理应用中的Action映射,以及该Action包含的Result定义等。除此之外,Stru...
  • sun_boy1
  • sun_boy1
  • 2015年06月08日 15:17
  • 1216
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Struts Validation框架浅尝2
举报原因:
原因补充:

(最多只允许输入30个字)