用decorator來裝飾動態的左側選單和內容部分

2021-06-25 23:39:40 字數 1089 閱讀 6324

sitemmesh是乙個頁面裝飾框架,利用它可以很簡單的對整個系統進行統一架構裝飾,比如乙個應用系統的web層可能就是top+left+content+footer四個部分組成(下圖)

使用sitemesh定義好乙個統一的框架後,程式設計師只需要關注動態的內容部分就可以了,而不需要在每個頁面去單獨的include一堆的footer,left,header之類的公共部分--框架只是乙個工具,存在的目的在於提高生產率,減少重複勞動。

以下是這個sitemsh的裝飾頁面原始碼

非常簡潔明瞭,把頁面拆成可復用的元件單元,通過jsp include來引入

實際生產中的問題

做乙個系統,可能有多個模組組成,通常會給每個模組分配乙個namespace或package,如乙個使用者管理系統可能有user和system兩個模組組成,那麼其訪問鏈結很可能是http://localhost:8080/user/userlist.action和http://localhost:8080/system/sysconfig.action,這個時候對於不同模組其對應的左側選單或header部分很可能是不同的,如user模組左側選單是建立使用者,修改密碼,而system模組則是配置系統引數,傳送email等,怎樣用sitemesh來實現對於不同模組載入不同的左側選單的目的呢?通常有兩種方式

1.建立多個decorator,為每個模組都建立乙個單獨的decorator,在decorator裡載入不同的left選單

優勢:配置簡單,理解成本比較小

劣勢:對於絕大數系統來說,多個系統模組的模組一般都是統一的,配置多個decorator意味著建立個裝飾頁面,這些裝飾頁面裡可能95%以上的**都是一樣的,不同點在於include不同的left.jsp檔案

2.乙個decorator,使用動態引數來動態載入哪個left.jps檔案

實現原理:當前請求所在模組作為引數傳遞給sitemesh,sitemesh讀取該引數,並去對應模組載入各自的left.jsp檔案,這樣就存在以下的問題

a)所在模組資訊存放在**?

通常的做法是在動態頁面的

thepage.getproperty("meta.modulename")%>/left.jsp">

裝飾模式 Decorator

裝飾模式 decorator 動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更加靈活。其中component定義了乙個物件介面,可以給這些物件動態的新增職責 concretecomponent是定義了乙個具體的物件,也可以給這個物件新增一些職責 decorator裝飾抽象類,...

Decorator 裝飾模式

定義 動態的給乙個物件新增一些輔助功能,而不改變原有的類。案例 假如現在有個文字控制項textview,它可以在螢幕上顯示文字,但當文字過多的時候,乙個螢幕顯示不下,這時就需要給它新增乙個滾動條。給乙個視窗加乙個滾動條不是原有的功能,而是額外的功能,比如還可以加乙個黑色外框,而且這些操作不是為某乙個...

裝飾模式 Decorator

裝飾模式 decorator 1.裝飾模式 decorator 的定義 又名包裝 模式,裝飾模式以對客戶端透明的方式擴充套件物件的功能,是繼承關係的乙個替代方案。2.裝飾模式以對客戶端透明的方式動態的給乙個物件附加上更多的責任。換言之客戶端並不會覺的物件在裝飾前和裝飾後有什麼區別。3.裝飾模式可以在...