軟件是對(duì)質(zhì)量的不懈追求

          struts2輸入驗(yàn)證--補(bǔ)充(轉(zhuǎn))

          原文地址:http://blog.csdn.net/ForWayfarer/archive/2008/09/20/2955812.aspx

          1.struts2怎么實(shí)現(xiàn)方法簽名(類(lèi)似于struts1的DispatchAction):在strust.xml中配置如下
          <action ... method="register" ></action>
          <action ... method="login" ></action>
          <action ... method="insert" ></action>

          (1)struts2怎么實(shí)現(xiàn)分發(fā)驗(yàn)證:對(duì)應(yīng)于每個(gè)方法簽名,可以有相應(yīng)的validate()方法如下
          public void validateRegister()
          public void validateLogin()
          public void validateInsert()

          (2)struts2怎么實(shí)現(xiàn)分發(fā)驗(yàn)證:對(duì)應(yīng)于每個(gè)方法簽名,可以有相應(yīng)的驗(yàn)證框架如下
          UserAction-register-validation.xml
          UserAction-login-validation.xml
          UserAction-insert-validation.xml

          2.驗(yàn)證順序

          在struts1中,如果在FormBean中覆蓋了validate()方法,讓其放回null值,則驗(yàn)證框架(xml驗(yàn)證)就會(huì)失效。返回 null則代表驗(yàn)證通過(guò)or無(wú)需驗(yàn)證;覆蓋的validate()方法如果返回super.validate(mapping,request)即調(diào)用父 類(lèi)的validate(mapping,request),驗(yàn)證框架才會(huì)起作用。也就是說(shuō),如果想讓驗(yàn)證框架有效,則不要覆蓋validate()方法, 如果除了驗(yàn)證框架驗(yàn)證,你還想在validate()方法中添加一些其他驗(yàn)證,可以覆蓋validate()方法,但返回值須為 super.validate(mapping,request)。

          在struts2中類(lèi)似。struts2的執(zhí)行順序?yàn)椋?/p>

          (1). 首先Struts2對(duì)客戶端傳來(lái)的數(shù)據(jù)進(jìn)行類(lèi)型轉(zhuǎn)換;

          (2). 類(lèi)型轉(zhuǎn)換完畢后再進(jìn)行輸入校驗(yàn),順序:UserAction-validation.xml --> UserAction-login-validation.xml --> public void validateLogin(){} --> public void validate(){};

          (3). 如果類(lèi)型轉(zhuǎn)換和輸入校驗(yàn)都沒(méi)有錯(cuò)誤發(fā)生,那么進(jìn)入login()方法/execuet()方法(調(diào)用商業(yè)邏輯).

          注意:如果類(lèi)型轉(zhuǎn)換不成功,也同樣要進(jìn)行輸入校驗(yàn),所以錯(cuò)誤信息打印會(huì)將二者的錯(cuò)誤信息全部打印出來(lái)

          3.struts2的錯(cuò)誤信息

          struts2有兩種錯(cuò)誤級(jí)別:addFieldError和addActionError

          addActionError(String anErrorMessage) -- Add an Action-level error message to this Action:看源代碼對(duì)于Action級(jí)別的錯(cuò)誤信息,實(shí)際上是放置在ArrayList中的,action級(jí)別的error不會(huì)在表單中顯示。

          addFieldError(String fieldName, String errorMessage) --  Add an error message for a given field:看源代碼真正存放field級(jí)別錯(cuò)誤信息的對(duì)象是LinkedHashMap,該LinkedHashMap的key是String類(lèi)型 的,value是ArrayList類(lèi)型的(addFielderror(String, ArrayList)),實(shí)際上是:LinkedHashMap<String, ArrayList<String>> errors。field級(jí)別的error會(huì)在表單中顯示。

          源代碼中還有這樣一個(gè)方法:public boolean hasErrors() { if (hasActionErrors() || hasFieldErrors()) ...} 則返回input頁(yè)面,表示不論是field級(jí)別的還是action級(jí)別的,只要錯(cuò)誤容器不為空,就返回 到input頁(yè)面。

          另外:struts2驗(yàn)證框架(xml驗(yàn)證)是將錯(cuò)誤保存在fielderror中的,而不是actionerror。所以在jsp顯示錯(cuò)誤時(shí)要注意。

          4.struts2支持客戶端驗(yàn)證,s標(biāo)簽依然支持js事件,所以客戶端驗(yàn)證推薦自己寫(xiě)js,不過(guò)基本不用struts做客戶端驗(yàn)證。此外,s標(biāo)簽即使你不給其設(shè)置id屬性,s標(biāo)簽也會(huì)自動(dòng)生成一個(gè)id(通過(guò)查看頁(yè)面源代碼(獲得s標(biāo)簽的html代碼)可獲得),如果你自定義了id,則會(huì)將s標(biāo)簽自動(dòng)生成的id覆蓋。


          posted on 2009-06-17 09:40 BlakeSu 閱讀(1174) 評(píng)論(3)  編輯  收藏

          評(píng)論

          # dd[未登錄](méi) 2014-11-05 18:28 dd

          sdfasdfasdfas afaffsadf  回復(fù)  更多評(píng)論   

          # 文章不錯(cuò) 2014-11-05 18:30 小王

          這篇文章寫(xiě)的還不錯(cuò)哦  回復(fù)  更多評(píng)論   

          # 22 2014-11-05 18:31 2

          @小王
          呵呵  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 高州市| 修文县| 仙居县| 银川市| 随州市| 岳池县| 镶黄旗| 荣昌县| 横山县| 青浦区| 宁乡县| 许昌县| 水城县| 利川市| 福建省| 武夷山市| 垫江县| 垦利县| 扶余县| 芷江| 呼图壁县| 桐梓县| 西平县| 宁陵县| 白城市| 自治县| 四子王旗| 榆树市| 得荣县| 彰化市| 色达县| 若羌县| 新野县| 昭觉县| 万山特区| 留坝县| 平乡县| 江都市| 应用必备| 绥棱县| 科尔|