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 閱讀(667)
評論(0) 編輯 收藏 所屬分類:
struts