王朝网络
分享
 
 
 

Struts Validation框架浅尝2

王朝java/jsp·作者佚名  2006-01-09
宽屏版  字体: |||超大  

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

关于作者

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有