Sitemesh的問題讓人非常頭痛,搞了一天。現把心得整理一下
首先是decorator.xml裡面的配置問題
<decorator name="admin" page="admin.jsp">
<pattern>/index/login.jsp</pattern>
<pattern>/index/index.jsp</pattern>
<pattern>/common/journal/journalHome.jsp</pattern>
</decorator>
定義了amin這個裝飾器裝修的頁面,均采用絕對路徑
其次是裝飾器頁面裡的路徑,分為兩部分,
<link rel="stylesheet" type="text/css" href="<%=application.getContextPath()%>/decorators/main.css">
這些HTML标簽裡的 href可以用="<%=application.getContextPath()%>/獲得應用環境的路徑,沒問題
但是
<page:applyDecorator page="<%=application.getContextPath()%>/decorators/nav.jsp" name="panel" encoding="UTF-8" />
就有問題了,總是編譯不過,是否寫錯了,還是不能這樣用,還在研究中
不過有一點還是明白的,那就sitemesh過濾器對目前的請求位址進行處理,截取最後一個/前的位址,再加到<page:applyDecorator>标簽中的page屬性上,如目前請求
http://localhost:8080/macaulites/common/journal/journalHome.jsp
<page:applyDecorator page="/decorators/nav.jsp" name="panel" encoding="UTF-8" />
最後得到的位址是
http://localhost:8080/macaulites/common/journal/decorators/nav.jsp
是以經常出現找不到頁面的問題,我們在裝飾器标簽的page屬性用絕對位址"/macaulites"有問題,但用另一種絕對位址形式則無問題如
http://localhost:8080/macaulites/decorators/nav.jsp
現在項目的sitemesh路徑的解決方法是:href src 等用 /macaulites/...... 這種形式的絕對路徑
page 屬性用 http://localhost:8080/macaulites/ 這種絕對路徑