2011-06-14 79 views
2

我想知道是否可以使用g:include來僅包含給定頁面的正文內容。Grails g:include可以做嗎?

說我有一個主要的頁面佈局如下:

<html> 
    <head> 
    <title>My start page</title> 
    <g:layoutHead> 
    </head> 
    <body> 
    <g:layoutBody> 
    </body> 
</html> 

然後主網頁(index.gsp中)

<html> 
    <head> 
    <!-- main layout reference --> 
    <meta name="layout" content="main"/> 
    </head> 
    <body> 
    THIS IS MY INDEX BODY CONTENT WITH AN INCLUDE 
    <g:include controller="book" action="list"/> 
    <g:link controller="book" action="list">See the full list!</g:link> 
    </body> 
</html> 

最後書/列表頁面

<html> 
    <head> 
    <!-- main layout reference --> 
    <meta name="layout" content="main"/> 
    </head> 
    <body> 
    <table> 
    <g:each in="${books}"> 
     <tr> 
     <td>${it.author}</td> 
     <td>${it.title}</td> 
     <td>${it.price}</td> 
     </tr> 
    </g:each> 
    </table> 
    </body> 
</html> 

所以我想實現的是,主頁面(index.gsp)只包括book/list頁面中定義的表格。但是,當我嘗試這個包括整個html定義(<html>標籤和所有)。

是否有可能以某種方式做到這一點?我嘗試過像<g:include controller="book" action="list" view="someView.gsp"/>之類的東西,但這不起作用。我真的想要避免必須向「索引控制器」添加書目列表邏輯,我想重新使用現有的控制器。

我不能成爲第一個有這種用例的人,你們提出了什麼解決方案?

回答

6

您可以使用applyLayout標記。簡單地只創建一個empty.gsp佈局:

<g:layoutBody/> 

然後用applyLayout裝飾你include標籤:

<g:applyLayout name="empty"> 
    <g:include controller="book" action="list"/> 
</g:applyLayout> 

有關進一步參考在Grails guide的條目。

+0

這正是我正在尋找的,謝謝一大堆! – netbrain 2011-06-14 18:35:55

+0

這是否仍然是正確的方法。 – Nix 2013-02-26 14:37:24

0

這是恕我直言,不可能。一個想法是創建一個基於g:include的自定義標籤,通過例如剝去部分代碼。一個xpath表達式。我不知道這已經存在。

另一種方法是,使用g:renderindex.gsp模板書的list.gsp的主體部分重構爲一個template和參考。但這意味着數據模型必須在index.gsp上下文中可用,因爲g:render不會調用控制器。

備註:使用g:include時,最好使用springcache plugin進行頁面片段緩存。

+0

春季緩存插件也是爲什麼我要這樣工作的原因之一的第一個目的。 – netbrain 2011-06-14 08:53:17

-1

是的,但你需要你需要一個更多的水平。看看Grails模板。從本質上講,你就會有一個模板:含_books.gsp:

<table> 
    <g:each in="${books}"> 
     <tr> 
     <td>${it.author}</td> 
     <td>${it.title}</td> 
     <td>${it.price}</td> 
     </tr> 
    </g:each> 
    </table> 

那麼你的指數是:

<html> 
    <head> 
    <!-- main layout reference --> 
    <meta name="layout" content="main"/> 
    </head> 
    <body> 
    THIS IS MY INDEX BODY CONTENT WITH AN INCLUDE 
    <g:render template="books"> 
    <g:link controller="book" action="list">See the full list!</g:link> 
    </body> 
</html> 

和你的名單將是:

<html> 
    <head> 
    <!-- main layout reference --> 
    <meta name="layout" content="main"/> 
    </head> 
    <body> 
    <g:render template="books" /> 
    </body> 
</html> 

(我的語法可能不是100%正確的,因爲我已經完成了幾個月的工作,但模板背後的想法是短暫的,可重用的GSP代碼片段,它們本身並不意味着要顯示。

+0

除了這裏我必須在索引上下文中列出書籍列表:( – netbrain 2011-06-14 18:03:34