旅行的意義

           

          Struts2 數據輸入校驗(1) —— 函數驗證

          用struts2標簽庫來實現上述目的的基本原理:
          錯誤消息分為field級和action級,都在ActionSupport類中預定義了,不同的是,
          fieldError是通過一個Map來實現,事實上記錄了field的名字和錯誤信息,因此能在頁面上對應的field中顯示;
          而actionError是通過一個Collection實現,沒有記錄報錯的來源,只記錄了錯誤信息。
           

          注意,下面是簡要流程: 
          (1)頁面提交到action之后,首先struts會嘗試對輸入的字符串信息根據Action中定義的屬性類型進行類型匹配及轉換,如果輸入為空,它會將內容置為該類型的缺省值(0、0.0、空字符串等等),對于數據格式不匹配的情況,比如說在age欄里面輸入字母等等,struts會自動提示默認的錯誤,并返回input,這一工作是struts2自動完成的。
           
          (2)然后,驗證機制生效,調用validate()函數和XML驗證框架中的驗證邏輯(《Struts2 數據輸入校驗(2) —— XML驗證 》會提到),檢查的同時會因為驗證錯誤調用了addFieldError()和addActionError()。頁面提交之前,struts會調用ActionSupport(嚴格說是ValidationAware接口)的hasErrors()方法,該方法很簡單,就是檢查fieldError的Map和actionError的Collection是否為空,如果均為空,則調用execute()方法[*]進行業務邏輯的調度,否則返回error。
           
          (3)最后,程序會根據返回信息執行forward操作,struts.xml中則定義了這些返回值所對應的跳轉邏輯。

           
          如果有錯誤返回,錯誤信息會在頁面上提示
          在Action中所有addFieldError()設置的信息將在對應的field位置顯示;
          在Action中所有addActionError()設置的信息將不會顯示,除非在頁面中定義了s:actionerror控件,那么錯誤將以ul的格式顯示。
           
           
           
          對多驗證和跳轉邏輯的支持
          對于一些Action如果需要重用,struts也提供了支持。
          上述[*]處,你也可以指定其它任意的名字,這需要在struts.xml中修改對應action的method屬性
          <action name="XXXAction" class="com.myspace.myname.XXXAction" method="newExcuteName">
                
          <result>success.jsp</result>
          </action>

           
          同時在XXXAction中我們需要定義一個方法
          public String newExcuteName(){  /*dummy code*/ }

          如果同時還定義了
          public void validateNewExcuteName(){  /* dummy code */ }

          那么在執行validate()之前,程序會先執行validateNewExcuteName()方法
          可以考慮把所有公用的驗證邏輯放到validate()方法中
          上述過程完全是靠java反射機制實現的,效率會低一些,所以除非真有必要,否則不用。

           

          錯誤提示字符串的本地化
          在validator方法中直接寫錯誤信息固然方便,但不算是一個好習慣,同時也不能支持本地化。下面簡單說明本地化的兩種方式
          1、全局國際化默認的錯誤提示,首先在struts.xml中加入常量

          <struts>
          <constant name="struts.custom.i18n.resources" value="message"></constant>
          </struts>


          然后在與struts.xml同級的位置建立message.properties中寫入

          xwork.default.invalid.fieldvalue={0} error

           

          2、針對某個Action的驗證錯誤提示
          在與XXXAction同級目錄下建立與該Action同名的屬性文件
          XXXAction.properties中寫入

          invalid.fieldvalue.字段名=錯誤信息

          posted on 2009-02-01 21:45 bacon 閱讀(2415) 評論(1)  編輯  收藏 所屬分類: J2EE

          評論

          # re: Struts2 數據輸入校驗(1) —— 函數驗證 2009-03-17 18:46 polaris

          怎么感覺殘缺不全呢?沒頭沒尾的……  回復  更多評論   

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 定安县| 喀什市| 通渭县| 滨州市| 进贤县| 咸宁市| 炎陵县| 平潭县| 板桥市| 崇义县| 丹巴县| 策勒县| 南漳县| 建平县| 萝北县| 洞口县| 来凤县| 正安县| 庆阳市| 新和县| 泸溪县| 郯城县| 湘阴县| 多伦县| 鞍山市| 景宁| 拉孜县| 永城市| 长乐市| 城市| 龙胜| 嘉祥县| 通渭县| 垣曲县| 沐川县| 吉木萨尔县| 南通市| 伊金霍洛旗| 庄河市| 安溪县| 新安县|