筆記03 異常支援、防止頁面重新整理和後退、方法驗證

來源:互聯網
上載者:User

標籤:

Struts2對異常支援(聲明式異常、自動的異常處理), 異常處理(運行期異常事務自動復原)

1. 自訂異常類,繼承RuntimeException或Exception實現構造方法.

2. 配置異常:全域頁面跳轉,與全域異常處理。其他包如果想使用,需要繼承。

    <global-results>

            <result name="error">/error.jsp</result>

            <result name="input">/input.jsp</result>

    </global-results>

    <global-exception-mappings>

           <!--   result表示發生異常時,跳轉的頁面    -->

           <exception-mapping  result="error" exception="com.bjpowernode.util.MyException">    </exception-mapping>

     </global-exception-mappings>

3. action中加入異常處理,在<action>下面。局部異常。

    <exception-mapping  result="error" exception="com.bjpowernode.util.MyException">      </exception-mapping>

4. 在頁面中可以使用el取得異常資訊

    ${exception.message }<br>

    ${exceptionStack}<br>

5. 有異常先找局部的,沒有再找全域。

 

 

防止頁面重新整理和後退:token令牌

1. 頁面的表單中加入token標籤(自動產生token碼)。token放在session中。可以看底層代碼。

2. 配置令牌可以針對不同的方法配置

3. 令牌產生錯誤時傳回值為invalid.token,可通過這個值跳轉到錯誤頁面 

    

4. 使用令牌時不要用redirect或redirectAction,並且要返回當前的頁面,否則token失效。    

    頁面內容。對一個按鈕進行測試,此按鈕只有一次起作用。其他情況下將無效。

    <s:form action="testSave">

             <s:token></s:token>

             <s:submit value="token"></s:submit>

    </s:form>   

    <interceptor-ref name="token">

         <param name="includeMethods">save</param>

    </interceptor-ref>                

    <result name="invalid.token">/input.jsp</result> 

5. 不讓用token時用session碼。

6. 重新導向將會找不到token的值,只有特定的頁面有token碼。

7. token必須用strust2的標籤庫。使用者訪問網址,當伺服器將某個頁面解析時會為標籤增加token值,然後將解析完的頁面發送給使用者。

8. token攔截器可以配置在action中,值對特定的action起作用。也可以配置成全域的,對所有action起作用。可通過includeMethods和excludeMethods,來決定對哪些方法使用token標籤。

 

 

方法驗證

1. action預設執行execute()方法,該方法會拋出異常。

2. 特定方法的驗證:如要驗證save(),則驗證方法應該是validateSave()。執行順序:validateSave()----validate()---save()。驗證結束後,發生錯誤後,不會繼續往下執行,不再執行save方法。

    驗證執行順序:類型轉換----驗證架構----驗證方法,若有錯誤會在所有的驗證執行完後停止,不會執行被驗證的屬性或方法。

3. validate方法先於任何方法執行,包括execute()。是驗證方法。若出現錯誤,將不繼續往下執行,直接返回頁面。執行input對應的頁面。頁面若有接受錯誤的方法,將顯示驗證錯誤的原因等。

    有商務邏輯的驗證不要放到validate中。

4. 驗證中的錯誤可以放在ActionError和fieldError裡面。儲存方this.addActionError(anErrorMessage)和this.addFieldError(name,errorMessage)。可以通過調用claerFieldErrors()和

    clearActionErrors()方法,來清除fieldErrors和actionErrors中的錯誤資訊,流程繼續往下執行action中的方法。clear方法不行。

5. 頁面擷取驗證訊息:

    <body>

            <s:fielderror></s:fielderror>    //裡面可以加樣式,同下。

            <s:actionerror   />    //裡面可以加顯示的樣式,如:<s:actionerror      cssStyle="color:red"/>

    </body>

    錯誤資訊的輸出內容,可以通過properties設定檔來決定輸出的內容。設定檔與要驗證的action放在同一個目錄下,名字為要驗證的action名.properties。如:TestAction.properties.檔案內容:

     

     表示若age,birthday,graduation如果發生field層級的錯誤,會往fieldError中添加的錯誤資訊。

     紅色的表示固定。

     

筆記03 異常支援、防止頁面重新整理和後退、方法驗證

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.