聲明式驗證步驟
一 、編寫action類
二、在struts.xml中配置該action
三、編寫驗證規則的配置檔案
去struts2-blank\web-inf\src\java\example 下找到 login-validation.xml 複制 然後重命名
命名必須為 必須放置在action類的同目錄下
<actionclassname>-validation.xml
<actionclassname>-<actionaliasname>-validation.xml
其中<actionaliasname>就是struts.xml中<ation>的name屬性值。
本例子 為 checkaction-validation.xml
一個action類可以應答多個action請求 ,多個action 請求使用不同的驗證規則 怎麼辦?
解決方案
為每個不同的action請求 定義其對應的驗證檔案:actionclassname-aliasname-
validation.xml不帶别名的配置檔案:actionclassname-validation.xml
中的驗證規則依然會起作用 可以吧各個action公有的驗證規則配置在其中 但需要注意的是
隻适應于某一個action的請求的驗證規則就不要再這裡
配置了
如下圖
字段驗證
字段校驗器配置格式:
<field name="被校驗的字段">
<field-validator type="校驗器名">
<!--此處需要為不同校驗器指定數量不等的校驗規則-->
<param name="參數名">參數值</param>
....................
<!--校驗失敗後的提示資訊,其中key指定國際化資訊的key-->
<message key="i18nkey">校驗失敗後的提示資訊</message>
<!--校驗失敗後的提示資訊:建議用gettext("i18nkey"),否則可能出現freemarker template error-->
</field-vallidator>
<!-- 如果校驗字段滿足多個規則,下面可以配置多個校驗器-->
</field>
非字段驗證
非字段校驗器配置格式:
<validator type="校驗器名">
<param name="fieldname">需要被校驗的字段</param>
<!--此處需要為不同校驗器指定數量不等的校驗規則-->
<param name="參數名">參數值</param>
<!--校驗失敗後的提示資訊,其中key指定國際化資訊的key-->
<message key="i18nkey">校驗失敗後的提示資訊</message>
<!--校驗失敗後的提示資訊:建議用gettext("i18nkey"),否則可能出現freemarker template error-->
</validator>
(1)字段校驗代碼,例如下面的代碼:
xml代碼
<field name="....">
<field-validator type="..."></field-validator>
</filed>
(2)非字段校驗代碼,例如下面的代碼:
<validators>
<validator type="required">
<param name="fieldname">username</param>
<message>使用者名必須填寫</message>
</validator>
</validators>
struts2的校驗大部分是圍繞action元件的字段屬性來實作的,主要是判斷某個字段屬性的輸入是否有效,是以又把這種内置的校驗器成為字段校驗器。還有一種校驗器它不是針對某個字段,而是針對多個字段的輸入值之間的邏輯關系進行校驗,典型的例子是再次輸入密碼的判斷。内置的expression校驗器就是一種非字段校驗器。
<validator type="expression">
<param name="expression"><![cdata[(password==repassword)]]></param>
<message>兩次輸入的密碼必須完全一緻!</message>
</validator>
非字段校驗:先指定校驗器:由誰來校驗,來校驗誰!
字段校驗器:先指定校驗的屬性:我來校驗誰,由誰來校驗!
短路驗證
加 short-circuit="true" 表示目前驗證器沒有通過後 直接傳回input視圖 不會驗證後面的驗證器