2016-02-08 71 views
0

我想用多個裝飾器使用sitemesh 3來裝飾頁面。 當我添加更多頁面時,會出現問題,其中一些頁面被另一個裝飾器裝飾導致不正確裝飾頁面。Sitemesh映射多個裝飾器將無法按預期工作

這裏是我想要做的事:

  • 裝飾//login 2裝飾
  • 裝飾/welcome有2個不同的裝飾

sitemesh3.xml這個樣子的,到目前爲止:

<?xml version="1.0" encoding="UTF-8"?> 
<sitemesh> 
    <mapping> 
     <path>/</path> 
     <decorator>/decorator1.jsp</decorator> 
     <decorator>/decorator1-2.jsp</decorator> 
    </mapping> 
    <mapping> 
     <path>/login</path> 
     <decorator>/decorator1.jsp</decorator> 
     <decorator>/decorator1-2.jsp</decorator> 
    </mapping> 
    <mapping> 
     <path>/welcome</path> 
     <decorator>/decorator2.jsp</decorator> 
     <decorator>/decorator2-2.jsp</decorator> 
    </mapping> 
</sitemesh> 

問題是,/welcome得到裝飾decorator1decorator1-2

有人可以解釋我在這裏錯過了什麼?

順便說一句,我可以使用多個<path>內部映射來映射一個或多個裝飾器上的多個位置,或者每個路徑必須單獨聲明。

我知道,我可以使用/*映射所有的網頁,但如果我想是這樣的:

<mapping> 
    <path>/admin/*</path> 
    <path>/manage/*</path> 
    <path>/secured/admin/*</path> 
    <decorator>decorator.jsp</decorator> 
</mapping> 

回答

1

關於第二個問題,答案是肯定的。您可以在<mapping>中添加多個<path>,所有路徑都將進行裝飾。
回到你的第一個問題,如果你用一些裝飾器來裝飾/或/ *,它們將被應用到所有的頁面上。這意味着,如果你想特別裝飾頁面,請不要使用/或/ *。以下配置來自我目前的項目。你可以看到,所有的頁面都是由menu.ftl裝飾的,而且我們也有其他頁面的一些特定的裝飾器。