posts - 495,comments - 227,trackbacks - 0

          javascript 支持

          ?????? web 應(yīng)用中,使用 javascript 的機(jī)會(huì)非常多。雖然不少書(shū)上提及客戶有可能從瀏覽器關(guān)閉 js 的執(zhí)行,但是要想完全的不使用它,目前看來(lái)好像還不行。比如一些復(fù)雜的 UI 是必須通過(guò) js 來(lái)實(shí)現(xiàn)的(如下拉式菜單等等)。那么 validation 框架支不支持客戶端的 js 驗(yàn)證呢?

          答案是:當(dāng)然。具體做法是:

          -????????? 在頁(yè)面 html:form 標(biāo)簽內(nèi)部添加 onsubmit="return validateEditForm(this);" (具體的語(yǔ)法: validate+ validation.xml 文件中定義的 form 的名字);如:

          <html:form action="<%=action%>" method="post" onsubmit="return validateEditForm(this);">

          -????????? html:form 內(nèi)部塊中添加: <html:javascript formName="editForm"/>

          ?????? 如此 2 步即可。雖然, validation 框架非常簡(jiǎn)單易用,但是還是有需要注意的地方。

          使用注意

          1.?????? 使用 validation 框架后, form 必須從 ValidatorForm 中派生,同時(shí)必須在你的 validate 方法中先調(diào)用基類的 validate 方法。對(duì)于使用 Dyna 開(kāi)頭的方法來(lái)創(chuàng)建 formbean 的讀者,你也必須改為以 dyna 開(kāi)頭含有 validator form

          2.?????? 注意 DynaValidatorForm ValidatorForm )和 DynaValidatorActionForm ValidatorActionForm )的區(qū)別。剛開(kāi)始時(shí)從幫助中沒(méi)看明白這 2 者的區(qū)別,后來(lái)從網(wǎng)上一篇文章中得到了用法的區(qū)別。前者主要的視角是 formbean ,而后者的視角是 action 。

          當(dāng) formbean 被不同的 action 使用時(shí),對(duì)于不同的 action 而言,使用的 formbean 的屬性集合有大有小。此時(shí)如果仍然以 formbean 為主體,會(huì)造成其他 action 的不正常使用。因此, struts 中提出了 DynaValidatorActionForm ValidatorActionForm )。此時(shí)在 validation.xml 中的 form 標(biāo)簽的 name 屬性改為 action path 屬性,又由于 action 中有 attribute name 屬性, validation 框架就可根據(jù)這個(gè) action 得到對(duì)應(yīng)的 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 使得相關(guān)的 Action 的關(guān)系緊密,大大減少了應(yīng)用中 Action 的個(gè)數(shù),但是隨之而來(lái)也帶來(lái)了使用 Validation 框架的不便,不能不說(shuō)是一個(gè)遺憾。讀者也許認(rèn)為這種情況可以使用第 2 條的解決方案來(lái)解決,即采用 DyanValidatorActionForm ,然后在 Validation.xml 文件中 form 的名稱使用不同的 Actiond path ,即在 validation.xml 中使用: <form name="/user.do?method=doAdd"> ??? <form name="/user.do?method=doLoad"> 。然而,在目前的版本中 Validation 框架并不支持這種辨認(rèn)。一種繞過(guò)這個(gè)情況的方法是,針對(duì)同一個(gè) Action 實(shí)現(xiàn)類在 Struts-config.xml 文件中定義多個(gè) Action path ,在不需要進(jìn)行驗(yàn)證的地方將 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 的方法。

          結(jié)束語(yǔ)

          ?????? 總的說(shuō)來(lái), validation 框架大大的提高了頁(yè)面驗(yàn)證的開(kāi)發(fā)效率,更吸引人的是這些驗(yàn)證方法可通過(guò)自定義的 validator 來(lái)得到復(fù)用。使得這些驗(yàn)證代碼更加集中,可維護(hù)性得到加強(qiáng)。當(dāng)然隨著項(xiàng)目的進(jìn)行, validation.xml validator-rules.xml 會(huì)隨之增長(zhǎng),這部分的維護(hù)工作加重了。

          ?????? 同時(shí),由于不能非常好的和 DispatchAction 一起協(xié)作,也使得大量使用 DispatchAction 的項(xiàng)目不能非常好的使用它。建議大量使用 DispatchAction 和頁(yè)面驗(yàn)證非常復(fù)雜多變的項(xiàng)目可以暫時(shí)按原來(lái)的方法來(lái)驗(yàn)證,不使用 validation 框架。

          ?????? 至于 validation 框架的其他詳細(xì)信息,請(qǐng)參見(jiàn) struts 的文檔,在此不再贅述。

          參考資料

          n???????? http://raibledesigns.com/wiki/Wiki.jsp?page=SecuringDispatchAction DispatchAction validation 框架的協(xié)作解決方案來(lái)源于此。

          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 閱讀(675) 評(píng)論(0)  編輯  收藏 所屬分類: struts
          主站蜘蛛池模板: 竹北市| 五家渠市| 和龙市| 瓮安县| 屯留县| 隆化县| 繁昌县| 启东市| 麦盖提县| 中宁县| 赣榆县| 隆化县| 苏尼特右旗| 宝山区| 洪泽县| 武川县| 日土县| 元谋县| 遂昌县| 临漳县| 丁青县| 婺源县| 左云县| 普宁市| 肇州县| 西畴县| 集安市| 富民县| 沧州市| 景德镇市| 会东县| 平山县| 鸡东县| 吉首市| 旺苍县| 德阳市| 临澧县| 仁怀市| 岑巩县| 嘉鱼县| 德格县|