1.Decorator Tags 被用于建立裝飾器頁面.
<decorator:head />
<decorator:body />
<decorator:title />
<decorator:getProperty />
<decorator:usePage />
2.Page Tags 被用于從原始內容頁面訪問裝飾器.
<page:applyDecorator />
<page:param/>
<decorator:head />
插入原始頁面(被包裝頁面)的head標簽中的內容(不包括head標簽本身)。
<decorator:body />
插入原始頁面(被包裝頁面)的body標簽中的內容。
<decorator:title [ default="..." ] />
插入原始頁面(被包裝頁面)的title標簽中的內容,還可以添加一個缺省值。
例:
/_decorator/main.jsp中 (裝飾器頁面): <title><decorator:title default="卻省title-hello" /> - 附加標題</title>
/aaa.jsp中 (原始頁面):<title>aaa頁面</title>
訪問/aaa.jsp的結果:<title>aaa頁面 - 附加標題</title>
<decorator:getProperty property="..." [ default="..." ] [ writeEntireProperty="..." ]/>
在標簽處插入原始頁面(被包裝頁面)的原有的標簽的屬性中的內容,還可以添加一個缺省值。
sitemesh文檔中的例子很好理解:
The decorator: <body bgcolor="white"<decorator:getProperty property="body.onload" writeEntireProperty="true" />>
The undecorated page: <body onload="document.someform.somefield.focus();">
The decorated page: <body bgcolor="white" onload="document.someform.somefield.focus();">
注意,writeEntireProperty="true"會在插入內容前加入一個空格。
<decorator:usePage id="..." />
象jsp頁面中的<jsp:useBean>標簽一樣,可以使用被包裝為一個Page對象的頁面。 (懶的用)
例:可用<decorator:usePage id="page" /> :<%=page.getTitle()%>達到<decorator:title/>的訪問結果。
<page:applyDecorator name="..." [ page="..." title="..." ] >
<page:param name="..."> ... </page:param>
<page:param name="..."> ... </page:param>
</page:applyDecorator>
應用包裝器到指定的頁面上,一般用于被包裝頁面中主動應用包裝器。這個標簽有點不好理解,我們來看一個例子:
包裝器頁面 /_decorators/panel.jsp:<p><decorator:title /></p> ... <p><decorator:body /></p>
并且在decorators.xml中有<decorator name="panel" page="panel.jsp"/>
一個公共頁面,即將被panel包裝:/_public/date.jsp:
... <%=new java.util.Date()%> ...<decorator:getProperty property="myEmail" />
被包裝頁面 /page.jsp :
<title>page的應用</title>
.....
<page:applyDecorator name="panel" page="/_public/date.jsp" >
<page:param name="myEmail"> chen_p@neusoft.com </page:param>
</page:applyDecorator>
最后會是什末結果呢?除了/page.jsp會被默認的包裝頁面包裝上header,footer外,page.jsp頁面中還內嵌了date.jsp頁面,并且此date.jsp頁面還會被panel.jsp包裝為一個title加body的有2段的頁面,第1段是date.jsp的title,第2段是date.jsp的body內容。
另外,page:applyDecorator中包含的page:param標簽所聲明的屬性值還可以在包裝頁面中用decorator:getProperty標簽訪問到。