StrutsCatalog系列(1)--BaseAction

在應用程序中使用BaseAction

/**
作者:TedHusted
譯者:Rifoo Technology(http://www.rifoo.com
時間:2005-11-08
備註:轉載請保留以上聲明
**/

前言:
官方網站上自推出Struts時就有了StrutsCatalog這個專題來介紹Struts的設計模式和思想,但是知道的人並不多,而且很多人在開發時照搬模式而不知其所以然,尤其針對初學者來說,這些更是珍貴的東西。本站將陸續推出StrutsCatalog系列中文版,以滿足廣大初學朋友的要求。

在我們的應用中,Action通常都包含一些公用的方法或函數。爲了方便的共享這些公用方法或函數,我們通常在應用中聲明一個BaseAction,並卻所有應用中的自定義Action都是擴展這個BaseAction的。這裏提供一個BaseAction的範例文件,它包含多個公用方法和函數:

 http://cvs.apache.org/viewcvs/jakarta-struts/contrib/scaffold/src/java/org/apache/struts/scaffold/BaseAction.java

注意:要使它是線程安全的,所有公用方法或函數都必須通過方法簽名傳入所有的參數。而且Action不能夠共享其成員變量。(譯者注:這一點是很重要的,不然會導致多個線程共享一個變量的嚴重情況。)

如果關鍵的代碼要在每個Action的execute方法中編寫,那麼一個很好的策略是爲子類創建一個新的抽象方法來代替execute方法。這些可以通過BaseAction來實現,正常的話,它能夠返回這個新方法的結果。這個策略使得我們可以改變自己這個新方法的參數,爲系統提供一個更清晰的流程。

   public ActionForward execute(ActionMapping mapping, 
                 ActionForm form,
                 HttpServletRequest request,
                 HttpServletResponse response)
    throws Exception {

        // Application specific behaviour
        // if everything is kosher call subclass extension point

        return ( executeAction(mapping,form,request,response, myParameter ) )
   }

這裏,executeAction是基類的一個抽象方法。在這裏爲了演示,我們添加了一個額外的參數,myParameter。當然,如果我們的應用不需要改變簽名,那麼在自己的實現中還是簡單的保留Struts自己的execute簽名吧。

(譯者注:術語簽名,這裏指的是一個方法的方法名+參數名組成的部分)

發佈了84 篇原創文章 · 獲贊 2 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章