2009-10-11 85 views
6

我使用tile 2.0.6作爲我的模板框架以及struts 2.1.6。我正在寫一個簡單的cms頁面,並希望讓用戶定義每個html頁面的標題。struts 2,tiles 2動態標題

我有這樣

<definition name="base" template="/WEB-INF/jsp/templates/base.jsp"> 
     <put-attribute name="title" value=" "/> 
     <put-attribute name="header" value="/WEB-INF/jsp/templates/header.jsp"/> 
     <put-attribute name="content" value="dummy"/> 
     <put-attribute name="footer" value="/WEB-INF/jsp/templates/footer.jsp"/> 
     <put-attribute name="search" value="/WEB-INF/jsp/search.jsp"/> 
    </definition>  
    <definition name="staticview" extends="base"> 
     <put-attribute name="title" value=" - Static"/> 
     <put-attribute name="content" value="/WEB-INF/jsp/static/view.jsp"/> 
    </definition> 

標題定義代替把標題一個jsp的,有沒有辦法動態覆蓋在我的header.jsp中的標題(字符串)在後來的JSP屬性,示例view.jsp。或甚至進一步使用EL

<put-attribute name="title" value="%{title}"/> 

並且它會動態地選擇struts ognl上的標題。

請告知

在此先感謝

回答

4

在我們需要有這樣的看法頁面 -

<title><tiles:getAsString name="title" /></title> 

上面會得到你的頁面標題。除此之外,因爲我們想要的頁面標題是動態的,在tiles.xml配置,我說

<definition name="page1" extends="base"> 
    <put-attribute name="title" value="Page 1"/> 
    <put-attribute name="content" value="/WEB-INF/jsp/page1.jsp"/> 
</definition> 
<definition name="page2" extends="base"> 
    <put-attribute name="title" value="Page 2"/> 
    <put-attribute name="content" value="/WEB-INF/jsp/page2.jsp"/> 
</definition> 

現在,這可能看起來像打字就會使它看起來像它是靜態的。但是每次查看該頁面時,標題都應該與該頁面相同。有什麼更好的地方可以在tiles.xml上獲得這些信息。

對我來說,這不是標題本身,但我需要不同的頁面標題。我不想看上下文屬性來獲取頁面的路徑並確定頁面的標題。所以,這對我有用,並保持一切鬆耦合。

如果你想爲每個頁面或類似的任何不同的動態標題,這工作。

+0

+1。但是,就更好的地方放置這些信息而言,我希望標題可以從捆綁中拉出來以實現國際化。這條路線意味着您需要爲每種語言使用不同的圖塊定義。 – bphilipnyc 2015-04-28 14:59:33

+0

@bphilipnyc - 我完全同意。你知道一種使這種國際化友好的方法嗎? – vivekmore 2016-11-03 20:07:31

+0

不幸的是,沒有。對於我們的項目,由於這個原因,我避免在Tiles中放置標題(我從服務層調用消息包以獲得國際化標題)。相關文章:http://stackoverflow.com/questions/8061953/tiles-struts-el-expressions – bphilipnyc 2016-11-03 21:15:47

-1

我的標題添加到Action類的要求,這裏的模板我的JSP代碼(瓷磚1):

<title> 
    <tiles:getAsString name="title"/> 
    <%-- add additional title (if found) --%> 
    <logic:present scope="request" name="title"><bean:write scope="request" name="title"/></logic:present> 
</title> 
1

保持瓷磚的定義如下:

<put-attribute name="title" value=""/> 

添加標題作爲您的行動類的一個屬性。

而且在view.jsp的頁面使用此:

<tiles:insertDefinition name="staticview"> 
     <tiles:putAttribute name="title"> 
      ${title} <%--OR, <s:property value="title"/>--%> 
     </tiles:putAttribute> 
     <%--Remainning content--%> 
    </tiles:insertDefinition> 
1

我想這一點,和它的作品。

代碼1

<tiles:putAttribute name="title"> 
      You String 
</tiles:putAttribute> 

代碼2

<tiles:insertAttribute name="title" /> 

但編碼1必須CODE2之前執行。

+0

你可以使「你的字符串」動態,就像你可以把代碼放在那裏而不是一個靜態的字符串? (最好是一些可以從資源文件中獲取頁面標題的代碼) – user1884155 2014-02-06 15:59:35

0

發現這個簡單的解決方案在別處:

瓷磚屬性定義照例:

​​

在一個jsp頁面的屬性被第一進口,然後它可與支柱標籤一起使用:

<tiles:importAttribute name="title" /> 
<title><s:text name="%{#attr['title']}"/></title> 
+0

其他地方http://stackoverflow.com/q/13920587/1700321? – 2013-08-13 10:28:05