struts2校驗

struts2校驗:
輸入校驗的流程:
1。類型轉換器對請求參數執行類型轉換,並把轉換後的值賦給action中的屬性。
2。如果在執行類型轉換的過程中出現異常,系統會將異常信息保存到ActionContext,conversionError攔截器將異常信息封裝到fieldErrors裏,然後執行第3步。如果類型轉換沒有出現異常,則直接進入第3步。
3。系統通過反射技術調用action中的validateXxx()方法,Xxx爲方法名。
4。調用action中的validate()方法。
5。經過上面4步,如果系統中的fieldErrors存在錯誤信息(即存放錯誤信息的集合的size大於0),系統自動將請求轉發至名稱爲input的視圖。如果系統中的fieldErrors沒有任何錯誤信息,系統將執行action中的處理方法。

基於XML配置方式實現(驗證框架)流程:
1、建立Jsp頁面,定義需求 
     * 用戶名不能爲null ,""
     * 密碼不能爲null, ""  並且密碼的長度6-12之間 

2、定義Action(要增加一些需要驗證的屬性,這些屬性與頁面表單字段對應)
    *  要繼承ActionSupport或者實現Validateable接口:
3、配置struts_validate.xml文件
       *  驗證出錯轉向的頁面
                struts.xml配置<result name="input">/validate/login.jsp</result>   
                其中input轉向是在action中已經定義好的.
4、配置驗證的xml文件
    *  驗證的xml文件的規範在xwork-core-2.1.6.jar包下的:xwork-validator-1.0.3.dtd
    *  驗證文件的命名
              *   在這個校驗文件中,對action中字符串類型的username屬性進行驗證,
                  首先要求調用trim()方法去掉空格,然後判斷用戶名是否爲空。
             *    該文件需要和action類放在同一個包下,文件的取名應遵守
                   ActionClassName-validation.xml規則,其中ActionClassName爲action
                   的簡單類名,-validation爲固定寫法。
             *     例如:如果Action類爲cn.itcast.validate.ValidateXmlAction. 那麼該文件
                   的取名應爲:ValidateXmlAction-validation.xml
            *      ValidateXmlAction-validation.xml爲文件的配置如下
基於XML配置方式對指定action方法實現輸入校驗:
當校驗文件的取名爲ActionClassName-validation.xml時,會對 action中的所有處理方法實施輸入驗證。如果你只需要對action中的某個action方法實施校驗,那麼,校驗文件的取名應爲:ActionClassName-ActionName-validation.xm
校驗器案例:
required  必填校驗器
<field-validator type="required">
       <message>性別不能爲空!</message>
</field-validator>

requiredstring  必填字符串校驗器
<field-validator type="requiredstring">
       <param name="trim">true</param>
       <message>用戶名不能爲空!</message>
</field-validator>

stringlength:字符串長度校驗器
<field-validator type="stringlength">
 <param name="maxLength">10</param>
 <param name="minLength">2</param>
 <param name="trim">true</param>
 <message><![CDATA[產品名稱應在2-10個字符之間]]></message>
</field-validator>
int:整數校驗器
<field-validator type="int">
 <param name="min">1</param>
 <param name="max">150</param>
 <message>年齡必須在1-150之間</message>
</field-validator>

字段OGNL表達式校驗器
<field name="imagefile">
 <field-validator type="fieldexpression">
  <param name="expression"><![CDATA[imagefile.length() <= 0]]></param>
  <message>文件不能爲空</message>
 </field-validator>
</field>
email:郵件地址校驗器
<field-validator type="email">
 <message>電子郵件地址無效</message>
</field-validator>

regex:正則表達式校驗器
<field-validator type="regex">
     <param name="expression"><![CDATA[^13\d{9}$]]></param>
     <message>手機號格式不正確!</message>
</field-validator>
基於XML校驗的一些特點:
當爲某個action提供了ActionClassName-validation.xml和ActionClassName-ActionName-validation.xml兩種規則的校驗文件時,系統按下面順序尋找校驗文件:
1。AconClassName-validation.xml
2。ActionClassName-ActionName-validation.xml
系統尋找到第一個校驗文件時還會繼續搜索後面的校驗文件,當搜索到所有校驗文件時,會把校驗文件裏的所有校驗規則彙總,然後全部應用於處理方法的校驗。如果兩個校驗文件中指定的校驗規則衝突,則只使用後面文件中的校驗規則。

當action繼承了另一個action,父類action的校驗文件會先被搜索到。假設UserAction繼承BaseAction, UserAction在struts.xml的配置如下:
<action name="user" class="cn.itcast.action.UserAction" method="{1}">
 .....
</action>
訪問上面名爲user的action,系統先搜索到BaseAction-validation.xml, BaseAction-user-validation.xml,接着搜索到UserAction-validation.xml, UserAction-user-validation.xml。校驗規則是這四個文件的總和。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章