2014-08-27 47 views
0

我正在使用帶有2.0.6插件的Struts2框架。在我的web應用程序,我有一個「基地」的佈局,它由一個頁眉,頁腳和頁面內容:Tiles插件中的動態繼承Struts2

<definition name="sharedLayout" template="/shared/jsp/Base.jsp"> 
    <put-attribute name="pageHeader" value="/shared/jsp/Header.jsp"/> 
    <put-attribute name="pageContent" value=""/> 
    <put-attribute name="pageFooter" value="/shared/jsp/Footer.jsp"/> 
</definition> 

對於某些網頁,這就夠了。但是,我也有幾個頁面都使用相同的子標題。對付這種最簡單的方法是創建一個額外的瓷磚定義:

<definition name="sharedLayoutExtended" template="/shared/jsp/BaseExtended.jsp"> 
    <put-attribute name="pageHeader" value="/shared/jsp/Header.jsp"/> 
    <put-attribute name="pageSubHeader" value="/shared/jsp/SubHeader.jsp"/> 
    <put-attribute name="pageContent" value=""/> 
    <put-attribute name="pageFooter" value="/shared/jsp/Footer.jsp"/> 
</definition> 

然而,這有我重複最Base.jsp代碼(和base.css,基地的主要缺點。 js ...)和BaseExtended.jsp。更難維護和發展!

我試着總是使用BaseExtended,然後使用屬性忽略這些網頁誰沒有子頭:

<tiles:insertAttribute name="pageSubHeader" ignore="true" /> 

雖然這個作品,裏面有一些BaseExtended元素只應存在如果該屬性是acutally存在。例如,如果有一個subheader,那麼在jsp的其他地方應該有一個包含一些東西的div。

BaseExtended.jsp:因爲在之間的其他元素我無法將subheader.jsp裏面添加這個特殊的div

<body> 

<tiles:insertAttribute name="pageSubHeader" ignore="true" /> 

...some other jsp stuff... 

IF subheader is actually present, then have some stuff here 
ELSE have nothing here 

<tiles:insertAttribute name="pageContent" /> 

...some other jsp stuff... 

IF subheader is actually present, then have some stuff here 
ELSE have OTHER stuff here 

</body> 

有沒有一種方法可以讓我實現這些「如果/別人的」?

回答

1

如果您想測試pageSubHeader是否存在,那麼您可以在這裏使用useAttribute

使用JSTL

<tiles:useAttribute name="pageSubHeader" id="pageSubHeader"/> 
<c:if test="${not empty pageSubHeader}"> 
    //do your stuff here. 
</c:if> 

或小腳本

<tiles:useAttribute name="pageSubHeader" id="pageSubHeader"/> 
    <% 
    if(pageSubHeader != null) { 
     //do your stuff or include your script 
    } 
    %> 

或者你也可以使用importAttributelogic:not equal。請參閱相關的問題here

<tiles:importAttribute name="pageSubHeader" scope="request" /> 
<logic:notEqual name="pageSubHeader" value=""> 
    //do your stuff here 
</logic:notEqual> 

不知道是否有幫助。

+0

這是你的問題嗎? – user23123412 2014-09-02 05:01:33