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