1. 程式人生 > >Struts2學習筆記(十)——資料校驗

Struts2學習筆記(十)——資料校驗

Struts2的資料校驗屬於伺服器端校驗,Struts2 支援校驗方式 :

  • 手動校驗(程式碼校驗) :在伺服器端通過編寫java程式碼,完成資料校驗
  • 自動校驗(配置校驗) :XML配置校驗(主流) 和 註解配置校驗

1、手動校驗

   1)Struts2的手動校驗步驟:

  •   首先要從頁面中獲取對應的標籤name屬性的值,在動作類action中宣告同名的屬性,提供get和set方法;
  •   要繼承ActionSupport類或者實現Validateable介面;
  •   重寫Validateable介面的validate()方法,需要通過addFieldError(fieldName, errorMessage)方法來新增校驗提示,fieldName為錯誤提示欄位,errorMessage為錯誤提示資訊,在jsp頁面需要通過Struts2的<s:fielderror/>標籤來提示新增的資訊,該標籤有個name屬性,值為addFieldError方法中的fieldName,當添加了校驗資訊,Struts2框架會返回到name值為"input"的<result/>設定的檢視中;

  2)下面我們通過一個例子來演示手動校驗功能:

Action類:

複製程式碼
 1 public class ValidateAction extends ActionSupport {
 2     private String name;
 3     
 4     @Override
 5     public void validate() {
 6         if (name == null || "".equals(name)) {
 7             this.addFieldError("name", "姓名不能為空");
 8         }
 9     }
10 11 @Override 12 public String execute() throws Exception { 13 return SUCCESS; 14 } 15 16 public String getName() { 17 return name; 18 } 19 20 public void setName(String name) { 21 this.name = name; 22 } 23 }
複製程式碼

struts.xml配置檔案:

複製程式碼
 1 <
struts> 2 <constant name="struts.devMode" value="true" /> 3 4 <package name="default" namespace="/" extends="struts-default"> 5 <action name="validateAction" class="com.sunny.action.ValidateAction"> 6 <result>/success.jsp</result> 7 <!--Struts2的校驗資訊會返回到name值為input的檢視中--> 8 <result name="input">/input.jsp</result> 9 </action> 10 </package> 11 12 </struts>
複製程式碼

jsp頁面:

複製程式碼
1 <body>
2  <s:fielderror name="name"/>
3  <form action="${pageContext.servletContext.contextPath}/validateAction.action">
4     姓名:<input type="text" name="name"><br>
5     <input type="submit" value="提交">
6  </form>
7 </body>
複製程式碼

當第一次載入jsp頁面時不會顯示校驗資訊:

當在表單中不新增任何資訊直接點選提交按鈕時會顯示設定的校驗資訊:

2、自動校驗(XML配置檔案方式)

  1)XML配置檔案方式資料校驗步驟:

  • 首先要從頁面中獲取對應的標籤name屬性的值,在動作類action中宣告同名的屬性,提供get和set方法;
  • 建立一個XML格式驗證檔案,檔案的命名方式:ActionClassName-validation.xml,ActionClassName指的是Action類的名稱,該檔案需要和Action類放在同一目錄下;
    • XML格式驗證檔案的內容格式: 複製程式碼
       1 <?xml version="1.0" encoding="UTF-8"?>
       2 <!DOCTYPE validators PUBLIC
       3           "-//Apache Struts//XWork Validator 1.0.3//EN"
       4           "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
       5 <!--validators根元素-->
       6 <validators>
       7     <!--field:指定action中要校驗的屬性
       8             name:指定將被驗證的表單欄位的名字
       9      -->
      10     <field name="name">
      11         <!--field-validator:指定驗證規則
      12                 type:指定驗證規則的名稱
      13          -->
      14         <field-validator type="requiredstring">
      15             <!--param:向驗證器傳遞的引數,name值為校驗器的引數名 -->
      16             <param name="trim">true</param>
      17             <!--message:驗證失敗時,提示的錯誤資訊
      18                 裡面的文字:錯誤提示資訊
      19              -->
      20             <message>使用者名稱不能為空</message>
      21         </field-validator>
      22     </field>
      23 </validators>
      複製程式碼
    • Struts2的內建校驗器規則在路徑:xwork-core-x.x.x.jar中com.opensymphony.xwork2.validator.validators包的default.xml檔案:

      複製程式碼
       1 <validators>
       2     <!--validator:宣告驗證規則
       3             name:驗證規則的名稱
       4             class:驗證規則對應的類的完整路徑
       5      -->
       6     <!--required:必填校驗器,要求被校驗的屬性值不能為null--> 
       7     <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
       8     <!--requiredstring:必填字串校驗器,要求被校驗的屬性值不能為null,並且長度大於0,預設情況下會對字串去前後空格
       9             引數trim:該引數為可選引數,用於指定是否在校驗之前對字串進行整理。
      10     -->
      11     <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
      12     <!--int:整數校驗器,要求field的整數值必須在指定範圍內
      13             引數min:指定欄位值的最小值,該引數為可選
      14             引數max:指定欄位值的最大值,該引數為可選
      15     -->
      16     <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
      17     <!--long:整數校驗器,要求field的整數值必須在指定範圍內
      18             引數min:指定欄位值的最小值,該引數為可選
      19             引數max:指定欄位值的最大值,該引數為可選
      20     -->
      21     <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
      22     <!--short:整數校驗器,要求field的整數值必須在指定範圍內
      23             引數min:指定欄位值的最小值,該引數為可選
      24             引數max:指定欄位值的最大值,該引數為可選    
      25     -->
      26     <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
      27     <!--double:雙精度浮點數校驗器,要求field的雙精度浮點數必須在指定範圍內
      28             引數minInclusive:指定欄位數值所接受的最小值,該引數為可選
      29             引數maxInclusive:指定欄位數值所接受的最大值,該引數為可選
      30             引數minExclusive:指定欄位數值被排除的最小值,該引數為可選
      31             引數maxExclusive:指定欄位數值被排除的最大值,該引數為可選
      32     -->
      33     <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
      34     <!--date:日期校驗器,要求field的日期值必須在指定範圍內
      35             引數min:指定欄位日期值的最小值,該引數為可選
      36             引數max:指定欄位日期值的最大值,該引數為可選
      37     -->
      38     <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
      39     <!--expression:表示式校驗器,它是一個非欄位校驗器,當引數expression計算的值為true時,校驗通過,否則返回提示.
      40             引數expression:該引數為一個邏輯表示式,該引數使用OGNL表示式,並基於值棧計算,返回一個Boolean型別值。 
      41     -->
      42     <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
      43     <!--fieldexpression:欄位表示式校驗器,當引數expression計算的值為true時,校驗通過,否則返回提示.
      44             引數expression:該引數為一個邏輯表示式,該引數使用OGNL表示式,並基於值棧計算,返回一個Boolean型別值.
      45     -->
      46     <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
      47     <!--email:郵件地址校驗器,要求如果被校驗的屬性值非空,則必須是合法的郵件地址-->
      48     <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
      49     <!--url:網址校驗器,要求如果被校驗的屬性值非空,則必須是合法的url地址-->
      50     <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
      51     <!--visitor複合型別校驗器,該校驗器用來校驗Action中定義的複合型別屬性,支援簡單的複合型別或陣列型別或集合型別.
      52             引數context:校驗器引用的上下文,可以隨意取,可選引數
      53             引數appendPrefix:是否為欄位校驗資訊加字首(message中設定的值),可選引數
      54     -->
      55     <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
      56     <!--conversion:型別轉換校驗器,該校驗器檢查是否存在轉換異常
      57             引數repopulateField:指定當型別轉換失敗後返回input頁面時,型別轉換失敗的表單是否保留原來的錯誤輸入,true為保留,false為不保留.
      58     -->
      59     <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
      60     <!--stringlength:字串長度校驗器,用於檢驗欄位中字串長度是否在指定的範圍
      61             引數trim:該引數為可選引數,用於指定是否在校驗之前對字串進行整理。
      62             引數maxLength:用於指定最大字串長度,該引數為可選
      63             引數minLength:用於指定最小字串長度,該引數為可選
      64     -->
      65     <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
      66     <!--regex:正則表示式校驗器,檢查被校驗的屬性值是否匹配一個正則表示式.
      67             引數expression:指定正則表示式
      68             引數caseSensitive:指定進行正則表示式匹配時,是否區分大小寫,預設值為true,為可選引數.
      69     -->
      70     <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
      71     <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
      72 </validators>
      複製程式碼

  2)下面我們通過一個例子來演示XML配置檔案方式資料校驗功能:

Action類:

複製程式碼
 1 public class ValidateAction extends ActionSupport {
 2     private String name;
 3     
 4     @Override
 5     public String execute() throws Exception {
 6         return SUCCESS;
 7     }
 8     
 9     public String getName() {
10         return name;
11     }
12     
13     public void setName(String name) {
14         this.name = name;
15     }
16 }
複製程式碼

struts2配置檔案:

複製程式碼
 1 <struts>
 2     <constant name="struts.devMode" value="true" />
 3     
 4     <package name="default" namespace="/" extends="struts-default">
 5         <action name="validateAction" class="com.sunny.action.ValidateAction">
 6             <result>/success.jsp</result>
 7             <!--Struts2的校驗資訊會返回到name值為input的檢視中-->
 8             <result name="input">/input.jsp</result>
 9         </action>
10     </package>
11 
12 </struts>
複製程式碼

在Action類相同目錄下新建XML格式驗證檔案:ValidateAction-validation.xml:

複製程式碼
1 <validators>
2     <field name="name">
3         <field-validator type="requiredstring">
4             <param name="trim">true</param>
5             <message>姓名不能為空</message>
6         </field-validator>
7     </field<