Struts2 申明式驗證詳細介紹
驗證的方式有兩種,一個是申明式驗證,還有一種是寫程式碼驗證
我們今天學習的是申明式驗證
首先要明確,要驗證的Action物件,對Action物件進行申明配置,
Action物件程式碼如下
package cn.com.app; import com.opensymphony.xwork2.ActionSupport; public class TextValidation extends ActionSupport { private static final long serialVersionUID = 1L; /* * author:命運的信徒 date:2018/12/17 arm:申明式的驗證 */ private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String execute() { System.out.println("age:" + age); return SUCCESS; } }
然後在struts2-blank-2.3.36\WEB-INF\classes\example下面找到Login-validation.xml這個檔案,複製貼上
把字首名改成了Action類名一樣,並且把裡面的內容剔除一下
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> <validators> </validators>
配置之後的內容如下
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> <validators> <!-- 針對age屬性進行驗證--> <field name="age"> <field-validator type="int"> <param name="min">20</param> <param name="max">50</param> <message>age need to be between ${min} and ${max}</message> </field-validator> </field> </validators>
有一點需要注意,如果age的型別是Integer的話,就會有問題,不知道為什麼?
原因:驗證攔截器裡面沒有integer屬性的
只有如下屬性的:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator Definition 1.0//EN"
"http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd">
<!-- START SNIPPET: validators-default -->
<validators>
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>
<!-- END SNIPPET: validators-default -->
jsp頁面如下
<s:form action="mag.action">
<s:textfield label="age" name="age"></s:textfield>
<s:submit></s:submit>
</s:form>
struts.xml相關的檔案如下
<action name="mag" class="cn.com.app.TextValidation">
<result name="input">/i18n.jsp</result>
<result>/success.jsp</result>
</action>
測試效果如下
現在總結一下步驟:
申明式驗證的步驟如下
1、明確要驗證的物件age
2、對Action類進行配置,配置就是
然後在struts2-blank-2.3.36\WEB-INF\classes\example下面找到Login-validation.xml這個檔案,複製貼上
把Login改成了Action類名一樣,並且把裡面的內容剔除一下
3、在頁面上顯示錯誤資訊
如果是非simple主題的話,錯誤資訊就會自動顯示出來
如果是simple主題的話,就需要通過 <s:fielderror fieldName="age"></s:fielderror>或者${fieldErrors.age[0]}來顯示
4、錯誤資訊可以修改麼?
可以,
<!-- 針對age屬性進行驗證-->
<field name="age">
<field-validator type="int">
<param name="min">20</param>
<param name="max">50</param>
<message>age need to be between ${min} and ${max}</message>
</field-validator>
</field>
5、錯誤資訊提示可以國際化麼?
可以
第一步、設定key
<message key="error_age"></message>
第二步 在國際化配置檔案裡面新增
error_age=age need to be between ${min} and ${max}
就可以了
具體的國際化,怎麼國際化,請看https://blog.csdn.net/qq_37591637/article/details/85045963
<!-- 針對age屬性進行驗證-->
待驗證的欄位
<field name="age">
驗證規則
<field-validator type="int">
向驗證程式傳遞引數
<param name="min">20</param>
<param name="max">50</param>
定義驗證程式出錯的訊息
<message key="error_age"></message>
</field-validator>
</field>
注意:若一個Action類有多個action請求,多個action請求的驗證規則不同怎麼辦?
帶有別名:
那就使用ActionClassname-actionname-validation.xml為不同的action請求定義其驗證檔案
ActionClassname:Action類名
actionname是請求的名稱
不帶別名的配置檔案:
ActionClassname-validation.xml中的驗證規則依然起作用,可以把各個action、請求公共的部分放在裡面;
申明式驗證框架的原理
》struts2攔截機制提供了validation攔截器
>每個具體的驗證規則都忽悠對應具體的一個驗證器,有一個配置檔案會把驗證名稱和驗證器關聯起來
改檔案位於com.opensymphony.xwork2.validator.validators下面的default.xml檔案中