2010-11-19 32 views
0

我有一個問題,其中父模板之前正在評估嵌套模板。由於訂購問題,這會導致嵌套的標籤庫出現問題。如何更改Apache Tiles中的磁貼評估順序?

template.jsp

<%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%> 
<%@taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> 
<%@taglib uri="http://taglibs.com/tags" prefix="s"%> 
<%System.out.println("evaluating template.jsp");%> 
<s:outer> 
    <tiles:insertAttribute name="content" /> 
</s:outer> 

content.jsp

<%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%> 
<%@taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> 
<%@taglib uri="http://taglibs.com/tags" prefix="s"%> 
<tiles:insertDefinition name="template"> 
    <tiles:putAttribute name="content" /> 
     <%System.out.println("evaluating content.jsp");%> 
     <s:inner /> 
    </tiles:putAttribute> 
</tiles:insertDefinition> 

content.jsp頁被評估,下面是輸出。

evaluating content.jsp 
evaluating template.jsp 

content.jsp頁面失敗,因爲inner標籤必須是outer標籤內。在評估template.jsp後,如何讓Tiles評估content.jsp

回答

1

我可能是錯的,但我認爲Tiles需要解析整個JSP,這意味着你不能只按它的佈局方式來完成。當前佈局從目標JSP開始,然後在內部使用模板。我們可以使用圖塊定義來指定模板作爲填充內容的目標。我認爲這種方法可以讓你更高效地使用tile繼承,並且可以解決這個問題,因爲「template」將被渲染而不是第二。

例子: tiles.xml

<tiles-definitions> 
    <definition name="myTemplate" template="/WEB-INF/jsf/template.jsp"> 
     <put-attribute name="content" value="" /> 
    </definition> 
    <definition name="content" extends="myTemplate"> 
     <put-attribute name="content" value="content.jsp" /> 
    </definition> 
</tiles-definitions> 

現在必須指定一個確定指標的瓷磚作爲你的結果類型...如果你正在使用的struts2我會告訴你,但機會是與所有的框架您不。

您的模板jsp將保持不變。 和內容JSP被改寫這樣的:

<%@taglib uri="http://taglibs.com/tags" prefix="s"%> 
<%System.out.println("evaluating content.jsp");%> 
<s:inner /> 

注意,現在也沒有必要對任何瓷磚邏輯混合到頁面中。內容就是這樣。你會注意到tiles.xml文件比我真正需要的更復雜,但是我想在我們的例子中顯示,我們只有一個'put屬性',但在更復雜的頁面中可以有很多,所以'myTemplate'會生成一個包含頁面的頁面不僅包含內容,還包含頁眉和頁腳以及邊欄,甚至可能還包含頁眉,因此您可以更改頁面上的腳本和CSS,然後按照給定的示例對其進行擴展,然後僅更改所需的部分(通常它只是內容),進一步你可以擴展該定義...基本佈局 - >安全佈局擴展基地,但也許更改頭包括一個鎖圖標 - > View_users_in_secure_layout擴展安全佈局更改視圖用戶功能的內容。

+0

我對Tiles的問題是,我希望所有頁面內容都在一個JSP頁面內 - html頭部內容,頁面特定的CSS,菜單和內容。看來Tiles不會按我的意願工作。感謝您的輸入! – 2010-11-22 13:01:50