Struts Validation框架浅尝2

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开头含有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        

Struts.html">http://otn.oracle.com/oramag/oracle/04-jan/o14dev_Struts.html Check Your Form with Validator

n        

Struts1-1/">http://www-900.ibm.com/developerWorks/cn/java/l-Struts1-1/ 深入Struts 1.1

n        

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


关于作者

胡键,西安交通大学工学硕士,热衷于j2ee/.net

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

时间: 2024-09-25 17:56:46

Struts Validation框架浅尝2的相关文章

基于AJAX技术实现Struts校验框架

ajax 提要 实时的数据校验是AJAX技术的重要优点之一,Struts校验框架通过加入这种技术进一步丰富了其MVC,从而使得Web应用程序的开发效果更接近于桌面应用程序. 一. 引言 校验框架的根本目的是实现域校验.在Web应用程序中有许多方法可以实现域校验,总体上可以分为两类:服务器端和客户端.其中,Struts校验框架是适合于基于Java的Web应用程序环境最好的框架之一.它可以使用服务器端校验来配置应用程序并且使用在校验过程(在请求处理期间激活)中生成的错误消息:而且它也可以通过在请求页

使用AJAX的Struts验证框架

实时数据验证是AJAX技术的一大优势之一.通过应用此技术,struts验证框架将增强struts MVC,并使Web应用程序更接近于桌面应用程序. 此验证框架用于验证字段.有许多在Web应用程序上进行验证的方法.这些方法可分为两类:服务器端方法和客户端方法.Struts验证框架是面向基于Java的Web应用环境的最佳框架之一.它能够配置应用程序,方法是使用服务器端验证和错误消息,此错误消息在处理请求时呈现在调用的验证流程上,它还能够进行客户端验证,方法是使用请求页面上呈现的JavaScript.

Struts2教程5:使用Validation框架验证数据

在<Struts2教程4:使用validate方法验证数据>中曾讲到使用validate方法来验证客户端提交的数据,但如果使用validate方法就会将验证代码和正常的逻辑代码混在一起,但这样做并不利于代码维护,而且也很难将过些代码用于其他程序的验证.在Struts2中为我们提供了一个Validation框架,这个框架和Struts1.x提供的Validation框架类似,也是通过XML文件进行配置. 一.服务端验证 下面将给出一个例子来演示如何使用Struts2的validation框架来进

使用struts 2框架进行开发总是失败。

问题描述 使用struts 2框架进行开发总是失败. J2EE新手,看相关书籍练习,但是web项目无法成功显示.求解答. 总是显示description The requested resource is not available. 出错信息: 严重: Exception starting filter struts 2 java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils at com.opensymphon

java中使用Struts 2框架上传文件代码

HTML表单默认值:  代码如下 复制代码 <form action="" enctype="application/x-www-form-urlencoded" method="get"> ...</form> 要使用HTML表单上传文件,需要将HTML表单的enctype属性设置为"multipart/form-data",还需要将表单的method属性设置为"post"  代码

使用EMF Validation框架来验证EMF模型

EMF(Eclipse Modeling Framework)建模框架能够帮助我们将模型 (UML, XSD 等 ) 转 换成为健壮且功能丰富的 Java 代码.使用 EMF 来搭建应用程序,不但能极大的提高开发效 率,而且还能利用 EMF 提供的很多特性来保证模型的健壮和完善,主要包括模型变化通知机 制,模型的持久化以及模型验证框架.本文将要介绍的 EMF Validation Framework,是 EMF 的一个重要部分,通过使用 EMF Validation Framework,我们能方

myeclipse没有struts等框架的支持

问题描述 在项目名右键=>MyEclipse中没有AddStruts哪位高手解决过这种问题麻烦指点下下 解决方案 解决方案二: 问题解决了框架的支持选项都放到了MyEclipse==>Projectfacet里面解决方案三: 可能和myeclipse的版本有关(有点里面带struts的插件了,有的可能就没带)其实楼主可以试着自己搭建struts的环境,这样刚好也能了解下struts的配置

为何我用jetty+spring+mybatis+struts的框架搭的一个项目访问不了action

问题描述 我用的jetty7.6服务器,框架用的spring3+mybatis3+struts2,为何项目能正常启动,但是就是进不了action不管是form表单跳转,还是地址栏直接输入action都不行下面贴下我的文件内容:=================web.xml======================<?xmlversion="1.0"encoding="UTF-8"?><web-appid="web"versi

浅尝批处理系统

背景 Google发表了MapReduce计算范型及其框架的论文.MapReduce和并行数据库系统(MPP)各有优劣并且两者有一定的互补和学习.与传统MPP架构相比,MapReduce更适合非结构化数据的ETL处理类操作,并且可扩展性和容错性占优,但是单机处理效率较低. DAG计算模型是MapReduce计算机制的一种扩展.MapReduce对于子任务之间复杂的交互和依赖关系缺乏表达能力,DAG计算模型可以表达复杂的并发任务之间的依赖关系. Spark本质上是DAG批处理系统,其最能发挥特长的