Struts2學習–validation

來源:互聯網
上載者:User

References:《Struts2的資料驗證架構validation framework》[1],《Apache Struts 2 Documentation--Validation》

 

之前學習了Struts2的寫入程式碼校正,這回學習一下validation架構,即使用XML配置的方式。

一,Struts2資料驗證的整體架構介紹

   struts2的action都要繼承ActionSupprot類,這個類實現了Validateable與ValidationAware這兩個跟資料驗證有關的介面。其中Validateable只有一個方法validate()用於資料驗證;ValidationAware 則用於記錄驗證出錯時的相關資訊。

    而資料驗證在什麼時候被調用呢?資料驗證的調用是封裝在workflow攔截器裡,

我們看看workflow攔截器在struts_default.xml中的定義,它是放在預設的defaultStack攔截器組裡,相關順序如下:

<interceptor-ref name="params"/>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation"/>
<interceptor-ref name="workflow"/>

      params與conversionError這兩個攔截器在workflow的前面,它們的工作是從request中把資料轉成正確的Java類型資料,以供後面處理。validation攔截器實質是AnnotationValidationInterceptor與我們這裡談的資料驗證不是一回事,它只判斷有沒有@SkipValidation註解,如果有就不會路過資料驗證,只是起一個開關作用。

       當workflow攔截器觸發時,它先檢查當前請求的action是否實現了Validateable介面,如果實現了該介面,則調用 validate()方法:如果這個方法處理時發現有資料驗證不通過,則會產生一個錯誤資訊並交給ValidationAware的方法去儲存這些出錯資訊。當validate()方法執行完畢,workflow攔截器還要調用ValidationAware的hasErrors()方法,看看是否有出錯資訊產生,如果有出錯資訊,就中斷當前action的執行流程,返回"input"字串,一般我們是在設定檔struts.xml裡配置"input"返回結果的跳轉頁面。

二,資料驗證的方式

1.在action()裡面實現validation方法(上一次講過了)

2.使用xml設定檔:ActionClass-validations.xml

         其實struts2已經內建了一些基本的資料驗證,完全可以省去我們日常的一些資料驗證需求,通過設定檔的方式(預設攔截器中已經TurnOn了)。
在ActionClass所在的目錄下,建立一個以ActionClass名字組合成的特定xml:ActionClass-validations.xml(例,我的ActionClass名為RegUser,則我應該在同目錄下建一名為RegUser-validations.xml的檔案。

Struts2內建validator
 

範例程式碼:

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
       "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
  <field name="bar">
      <field-validator type="required">
          <message>You must enter a value for bar.</message>
      </field-validator>
      <field-validator type="int">
          <param name="min">6</param>
          <param name="max">10</param>
          <message>bar must be between ${min} and ${max}, current value is ${bar}.</message>
      </field-validator>
  </field>
  <field name="bar2">
      <field-validator type="regex">
          <param name="expression">[0-9],[0-9]</param>
          <message>The value of bar2 must be in the format "x, y", where x and y are between 0 and 9</message>
     </field-validator>
  </field>
  <field name="date">
      <field-validator type="date">
          <param name="min">12/22/2002</param>
          <param name="max">12/25/2002</param>
          <message>The date must be between 12-22-2002 and 12-25-2002.</message>
      </field-validator>
  </field>
  <field name="foo">
      <field-validator type="int">
          <param name="min">0</param>
          <param name="max">100</param>
          <message key="foo.range">Could not find foo.range!</message>
      </field-validator>
  </field>
  <validator type="expression">
      <param name="expression">foo lt bar </param>
      <message>Foo must be greater than Bar. Foo = ${foo}, Bar = ${bar}.</message>
  </validator>
</validators>

3,使用自己定義的驗證器做資料驗證

[1]裡面有,我就不抄了……

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.