1. 程式人生 > >struts2表單校驗與錯誤資訊處理

struts2表單校驗與錯誤資訊處理

struts2的表單校驗

對於開發表單校驗兩種途徑:

  • 客戶端校驗:js在頁面校驗,好處:使用者體驗好,快,缺點:不安全.
  • 服務端校驗:通過頁面需要訪問伺服器來獲取校驗結果,校驗在服務端,優點:安全.缺點:效率.

伺服器端表單校驗

服務端表單校驗,是表單安全的最後一道防線.

Struts2實現服務端校驗

  • java編碼方式
  • xml配置方式
  • 註解方式

程式設計式校驗

//在action中覆蓋volidate方法
public void validate(){
    if(StringUtils.isEmpty(user.getUsername)){
        addFieldError("username","使用者名稱必須輸入");
    }
}

針對動作類中的某個動作方法進行驗證
1:給不需要驗證的動作方法新增一個@SkipValidation 註解。
2:validation 方法遵守書寫規範。書寫規範:validate+要驗證的動作方法名稱。要驗證的動作方法首字母要大寫。如:validateRegist

xml配置校驗表單(推薦)

業務:登陸的時候,使用者或密碼不能為空,如果為空,提示使用者.
操作:

第一步:在action類所在的包中,建立一個xml檔案,名字必須滿足規則,ActionClassName-ActionName-validation.xml。如:UserAction-user_login-validation.xml(想對UserAction的login方法進行表單校驗)

第二步:引入xml約束,從包中的dtd檔案(xwork-core-2.3.15.3.jar)中複製.在未聯網的情況下,需要匯入本地提示。

第三步:配置校驗規則,進行表單校驗。xwork-core-2.3.15.3.jar\com\opensymphony\xwork2\validator\validator\default.xml裡面定義了很多內建的校驗器。可使用國際化進行解耦合。

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.3//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
    <!-- 使用者名稱 -->
    <!-- name:欄位名(屬性名) -->
    <field name="name">
        <!-- 指定校驗器 :內建,也可以自定義'
        type:校驗器的名字,欄位值不能為空
        -->
        <field-validator type="requiredstring">
            <!-- 校驗沒有通過的提示資訊,底層程式碼相當於:addFieldError(xxx,msg)-->
            <message>使用者名稱不能為空</message>
        </field-validator>
    </field>
    <!-- 密碼 -->
    <field name="password">
        <!-- 指定校驗器 :內建,也可以自定義'
        type:校驗器的名字,欄位值不能為空
        -->
        <field-validator type="requiredstring">
            <!-- 校驗沒有通過的提示資訊,底層程式碼相當於:addFieldError(xxx,msg)-->
            <message>密碼不能為空</message>
        </field-validator>
    </field>

</validators>

第四部:配置input結果集檢視:
在struts.xml中配置:

頁面回顯資訊:

Struts2錯誤資訊的儲存和處理

依賴於集合來儲存(3個集合)
ValidationAwareSupport

  • Collection actionErrors
  • Coolection actionMessages
  • Map

Struts2的配置檔案

可以讀取6個,2類
第一類:框架內建,使用者不能修改,只能看.

  • default.property (常量,功能開關)
  • struts-default.xml (內建功能,結果集、攔截器等)
  • struts-plugin.xml (外掛功能)

第二類:自定義,使用者可以用來覆蓋內建一些預設值,以及自己對映配置(action和class關係)

  • struts.property (自定義常量)
  • struts.xml (自定義常量或功能,如自定義action)
  • web.xml (自定義常量)

載入順序:從上到下執行.後加載的會覆蓋新載入的.

struts2的引數接收

請求引數型別:字串
後臺接收型別:java型別:int String date(yy-MM-dd)

同名多個引數,會自動封裝為陣列,比如:多個引數名hobby,
java類中定義一個屬性 private String[] hobby ,接收setHobby(),可以全部接收String[]。
用private String hobby接收setHobby() 可以嗎?
答案是可以的,頁面會全部接收,格式:”xx,xx”;—逗號空格