WebWork攔截器(做個種子先,內容陸續添加)

1.Alias Interceptor
可以爲傳入的參數(request parameters)設定別名,而不會將原有的名稱刪除。
使用方法:
在<action>中做如下配置:
<!--配置別名。前面的是原來的名字,後面的是新創建的別名-->
<param name="aliases">#{'userName':'name','userPassword':'password'}</param>
<!--別名攔截器,應該位於params攔截器前-->
<interceptor-ref name="alias">
      <!--可選的參數,指定一個別名映射的Action Parameter的Key,默認爲alias-->
      <param name="aliasesKey">alias</param>
</interceptor-ref>
<interceptor-ref name="params"/>

如果在Action中只有別名對應的屬性,而沒有原名對應的屬性,如只有name屬性而沒有userName屬性,在開發模式下(在webwork.properties中設定webwork.devMode = true)會報告異常。
解決的方法是讓Action實現com.opensymphony.xwork.interceptor.ParameterNameAware接口,在acceptableParameterName方法中屏蔽掉原始的屬性名
個人感覺:在使用ORM映射的時候可以通過這個攔截器避免直接暴露數據庫字段名。

2.Chaining Interceptor
在Action鏈中,從一個Action中將properties拷貝到另一個Action中。可以指定兩個參數:includes和excludes 來控制哪些property將在兩個Action之間進行拷貝。只能指定
includes和excludes中的一個,如果兩個同事指定將導致不確定的行爲。
在WebWork的文檔中還提到,如果一個對象實現了com.opensymphony.xwork.Unchainable標識接口將不會在Action Chain之間拷貝,參考ChainingInterceptord的源代碼可以
看到:
       ......
       if (!(o instanceof Unchainable)) {
                  
 OgnlUtil.copy(o, invocation.getAction(), ctxMap, excludes, includes);
                 
       }
       ......
但是我試驗的時候Unchainable似乎沒有起作用,對象依然被複制了。這很讓人鬱悶。

3.Execute and Wait Interceptor
當一個Action需要長時間運行的時候,可以通過Execute and Wait Interceptor 呈現一個等待頁面,直到Action執行完畢並返回結果。
使用ExecuteAndWaitInterceptor需要注意幾點:
(1)executeAndWait必須位於InterceptorStack的末尾;
(2)如果沒有提供一個名爲"wait"的結果,WebWork將自動創建一個等待結果。該等待結果用FreeMarker編寫,如果沒有加載FreeMarker引擎將無法運行。如果你不希望這樣,就必須
提供自己的等待頁面。
(3)無論等待結果是否被返回,當前的action都將在後臺運行並被置於棧頂。這允許你顯示進程數據,比如一個技術。讓頁面自動刷新去訪問action,可以做出貌似自動刷新的進度條。
(4)攔截器同樣支持使用一個初始的等待延遲。等待延遲是在向用戶呈現等待頁面前等待的時間,單位爲毫秒。
(5)在等待期間,將每隔100毫秒檢查一下action石佛運行完畢。
(6)由於action將運行於一個sperate thread(??),你將不能使用ActionContext,因爲他是一個ThereadLocal。這意味着,如果你需要訪問session,就需要實現SessionAware接口,而非ActionContext.getSesion().

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章