天天看點

Sitemesh 的路徑問題

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/​​ 這種絕對路徑