2012-01-18 77 views
8

我正在將現有的Tiles 1 webapp轉換爲Tiles 2架構。我無法將JSP頁面中的值傳遞給tiles屬性。如何將JSP中的值傳遞給tiles屬性?

這裏是我的瓷磚定義文件(瓷磚-definition.xml)

<tiles-definitions> 

    <definition name="cda.layout" template="/jsp/layouts/layout.jsp"> 
     <put-attribute name="pageTitle" value="StoryTitle" type="string"/> 
     <put-attribute name="pageHeader" value="StoryHeader" type="string"/> 
     <put-attribute name="resources" value="" type="string"/> 
    </definition> 

</tiles-definitions> 

的layout.jsp樣子:

<html> 
    <head> 
    <title><tiles:insertAttribute name="pageTitle" flush="true"/></title> 
    </head> 

    <body> 
    ... 
    ... 

    <div class="content"> 
    <h1><tiles:insertAttribute name="pageHeader" flush="true"/></h1> 
    </div> 

    ... 
    ... 
    </body> 
</html> 

我有一個使用的佈局詳情頁,需要將值傳遞給模板屬性。

<% 
    // create a business object and populate 
    String mytitle= story.getTitle(); 
    String myheader = story.getHeader(); 
    %> 

<tiles:insertTemplate template="../layouts/layout.jsp" flush="false" > 
    <tiles:putAttribute name="pageTitle" value="${mytitle}"/> 
    <tiles:putAttribute name="pageHeader"value="${myheader}"/> 
</tiles:insertTemplate> 

在story.jsp,我可以是System.out.print()爲mytitle,myheader的值並且它們被示出正確的。但是,這些值不會傳遞給tile屬性。

任何想法如何解決這一問題?

回答

17

${mytitle}是JSP EL表達式,這意味着:在網頁中查找範圍,或請求範圍,或會話範圍或應用程序範圍的屬性,命名爲「mytitle」。

通過定義scriptlet變量,您尚未在任何這些作用域中定義屬性。它會工作,如果你有

pageContext.setAttribute("mytitle", mytitle); 

但在JSP中使用腳本是不好的做法。我不知道你的故事bean來自哪裏,但它可能是一個請求屬性。如果是這樣,你可以定義一個新的頁面,scope屬性這種方式,使用JSTL:

<c:set var="mytitle" value="${story.title}"/> 

這是不必要的,雖然,因爲你可以在瓷磚標籤直接使用此表達式:

<tiles:putAttribute name="pageTitle" value="${story.title}"/> 

詳細瞭解this tutorial中的JSP EL。

+0

JB,該解決方案的工作。非常感謝。 – 2012-01-19 15:20:08

+0

感謝您的回答,我正在使用此解決方案,但問題是輸出將是$ {story.title}故事的標題。正如你看到$ {story.title}將被視爲一個變量和值。雖然,我只是從Java而不是JSP傳遞它。 – 2015-04-16 07:05:53

相關問題