第五節(下) Struts2 校驗

2021-06-21 10:09:09 字數 2650 閱讀 6564

一。說明

資料校驗,對客戶端訪問的引數進行資料校驗,如果請求資料型別無法轉換或不在合法範圍內都屬於資料校驗失敗。但在struts2中資料型別轉換和合法性的校驗分別放在兩個部分(***)執行。

請求首先通過型別轉換***將引數賦值到action屬性,再通過資料校驗方法對action屬性進行合法性校驗。如果資料在型別轉換過程中失敗,依然會執行合法性校驗。

型別轉換和資料校驗過程中會將錯誤資訊存放到fielderror物件中,struts2另乙個***負責檢測fielderror物件中是否包含錯誤資訊,如果包含則跳轉到input所指定的物理頁面。

dtd檔案位址已改變

二。資料校驗的編寫方式分為兩種:**方式與配置檔案方式

**方式

重寫aciton類的validate方法,對任何action訪問均執行。

在方法內對資料進行合法校驗,並將錯誤資訊儲存到fielderror物件內。

編寫action類的validate***方法,對***指定的訪問執行。***是配置action時的method值。

如果同時編寫validate與validate***方法,則執行順序為先執行

validate***後執行

validate方法。如果action類存在繼承關係validate方法會被繼承下來並執行。

在校驗方法中通過addfielderror("標籤名","錯誤提示內容")來對fielderror物件進行操作,同時呼叫gettext方法的話可以實現國際化提示資訊功能。

struts2的輸入校驗流程

1.型別轉換器負責對字串的請求引數執行型別轉換,並將這些值設定成action的屬性值。

2.在執行型別轉換過程中可能出現異常,如果出現異常,將異常資訊儲存到actioncontext

中,conversionerror***負責將其封裝到fielderror裡,然後執行第三步;如果轉換過

程沒有異常資訊,則直接進去第三步。

3.通過反射呼叫validate***()方法,其中***是即將處理使用者請求的處理邏輯所對應的方法

名。4.呼叫action類裡的validate()方法。

5.如果經過上面4步都沒有出現fielderror,將呼叫action裡處理使用者請求的處理方法;如果

出現了fielderror,系統將轉入input邏輯檢視所指定的檢視資源。

配置檔案方式

與action中所有方法關聯的配置方式

編寫xml規則配置檔案(參考以欄位為主語的配置方式、以規則為主語的配置方式)

命名規範:

儲存在與action類同目錄下。

與action中某乙個方法關聯的配置方法

編寫xml規則配置檔案(參考

以欄位為主語的配置方式、以規則為主語的配置方式

)命名規範:-validation.xml

儲存在與action類同目錄下。

執行順序:與**編寫同理。

情況一,為loginaciton配置了loginaction-validation.xml並為loginaction的login方法配置loginaction-login-validation.xml檔案,執行順序如下。

1.loginaction-validation.xml

2.loginaction-login-validation.xml

情況二,為父類baseaction配置了類校驗規則,為父類baseaction的login方法配置了方法校驗規則。

為子類loginaction配置了類校驗規則,為子類loginaction的login方法配置了方法校驗規則。

執行順序如下。

1.baseaction-validation.xml

2.baseaction-login-validation.xml

3.loginaction-validation.xml

4.loginaction-login-validation.xml

以欄位為主語的配置方式

<?xml version="1.0" encoding="utf-8"?>

引數值校驗失敗後的提示資訊(支援使用$實現國際化提示功能)

以規則為主語的配置方式

需要被校驗的字段

引數值校驗失敗後的提示資訊(支援使用$實現國際化提示功能)

短路的應用效果

當乙個欄位要滿足多個校驗規則時,第乙個規則失敗後不去執行其他規則校驗。

在和標籤中通過short-circuit控制。="true"表示短路 =「false」表示非短路。

短路的執行順序

1.所有以規則為主語的校驗器優先於以字段為主語的校驗器。

2.所有以規則為主語的校驗器中,排在前面的會先執行。

3.所有以欄位為主語的校驗器中,排在前面的會先執行。

短路的規則

1.所有以規則為主語的校驗器是最優先執行,如果某個以規則為主語的校驗器校驗失敗了,則該字段上所有以欄位為主語的校驗器都不會執行。

2.以規則為主語的校驗器失敗,不會阻止其他以規則為主語的校驗器的執行。

3.如果乙個以欄位為主語的校驗器失敗後,則該字段下的且排在該校驗失敗的校驗器之後的其他以欄位為主語的校驗器不會執行。

4.以欄位為主語的校驗器永遠都不會阻止以規則為主語的校驗器。

內建校驗器功能說明(略...)

函式第五節

coding utf 8 1.定義乙個func name 該函式效果如下。assert func lilei lilei assert func hanmeimei hanmeimei assert func hanmeimei hanmeimei def title name if isinsta...

第五節 字典

字典的表現形式為大括號 dict key必須可hash,必須唯一且必須為不可改變的資料型別 value可存放任意多個值,可修改,可不唯一 無序且查詢速度快 鍵 值 鍵值對 1 dic.keys 返回乙個包含字典所有key的列表 2 dic.values 返回乙個包含字典所有value的列表 3 di...

第五節 列表(list)

lpush listname value lpush 命令將乙個或多個值插入到列表頭部。lpush newlist valuea valueb lindex listname index 佇列從做往右,索引從0開始。隊頭在左邊,新插入的元素就是索引為0的元素。你也可以使用負數下標,以 1 表示列表的...