Sitemesh的配置與使用

2021-07-10 00:20:52 字數 3631 閱讀 8553

1)web-inf/web.xml中加入filter定義與sitemesh的taglib定義

sitemeshfilter

sitemeshfilter/*

ps:需要放在struts下面:

struts-cleanup

org.apache.struts2.dispatcher.actioncontextcleanup

2)建立web-inf/decorators.xml,在該檔案中配置有哪些模板,以及每個模板具體修飾哪些url,另外也可以配置哪些url不需要模板控制 , decorators.xml的乙個例子如下:

/static/*

/api/*

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

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

<

%@ page 

contenttype

="text/html; charset=gbk"

%>

<

%@ taglib 

uri=

""prefix

="decorator"

%>

<

html

>

<

head

>

<

title

>

<

decorator:title

default

="裝飾器頁面..."

/>

title

>

<

decorator:head

/>

head

>

<

body

>

<

jsp:include

page

="/header.jsp"

>

jsp:include

>

<

jsp:include

page

="/left.jsp"

>

jsp:include

>

<

decorator:body

/>

<

jsp:include

page

="/footer.jsp"

>

jsp:include

>

body

>

html

>

非常簡潔明瞭,把頁面拆成可復用的元件單元,通過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)所在模組資訊存放在**?

通常的做法是在動態頁面的元素中新增乙個元素,meta元素其實可以簡單的理解成乙個key-value的資料節點,如在user模組的建立使用者頁面/user/createuser.jsp裡新增

,而在system模組的系統配置頁面/system/sysconfig.jsp頁面新增如下

b)sitemsh怎麼讀?

對於所有的jsp頁面,根據jsp頁面所在的模組不同,也存放為不同的頁面下,這裡做乙個統一的命名約束,對於各個模組的左側選單,都統一命名為left.jsp,其目錄結構如下

/user/

left.jsp

/user/createuser.jsp

/system/

left.jsp

/system/sysconfig.jsp

有了這樣的命名約束後,我們就可以在sitemesh的裝飾頁面做文章了

<

%@ page 

contenttype

="text/html; charset=gbk"

%>

<

%@ taglib 

uri=

""prefix

="decorator"

%>

<

html

>

<

head

>

<

title

>

<

decorator:title

default

="裝飾器頁面..."

/>

title

>

<

decorator:head

/>

head

>

<

body

>

<

jsp:include

page

="/header.jsp"

>

jsp:include

>

<

span

style

="color:#ff0000;"

>

<

decorator:usepageid=

"thepage"

/>

span

>

<

jsp:include

page

="/<

%=<

span

style="

color

:#ff0000;"

>

thepage.getproperty("meta.modulename")

span

>

%>

/left.jsp"

>

jsp:include

>

<

decorator:body

/>

<

jsp:include

page

="/footer.jsp"

>

jsp:include

>

body

>

html

>

siteMesh使用參考

xmlns xsi version 2.4 sitemesh com.opensymphony.module.sitemesh.filter.pagefilter 30 index.jsp 新增藍色高亮部分。安裝完畢。例子1 test1.jsp taglib uri prefix decorator...

SiteMesh標籤使用說明

itemesh包括兩大標籤庫。decorator tags 被用於建立裝飾器頁面.page tags 被用於從原始內容頁面訪問裝飾器.做乙個簡單的介紹,了解一下各標籤的作用。1.插入原始頁面 被包裝頁面 的head標籤中的內容 不包括head標籤本身 2.插入原始頁面的標籤中的內容 不包括body標...

SiteMesh標籤使用說明

1.插入原始頁面的標籤中的內容。沒有屬性。2.插入原始頁面的標籤中的內容。注釋 裝飾jsp 可以在裝飾頁面body中使用如上語法來獲得被裝飾頁面的事件。3.插入被裝飾頁面的title標籤中的內容 default屬性 當沒有在被裝飾頁面找到title中有內容時此值被插入 4.插入原始頁面的proper...