<g:applylayout>和<g:render template =“”> </g:render> </g:applylayout>之间有什么区别?

时间:2013-02-05 15:51:03

标签: grails tags gsp sitemesh

正如标题所说......我正在使用grails来构建一个网页,我知道grails使用sitemesh来构建GSP。我做了一些谷歌搜索,我找到了两种方法来“平铺”gsps(g:applyLayout和g:渲染模板标签)。两者似乎都做了“平铺”gsps的工作所以我的问题是,有什么区别?

编辑:

例如,我将使用图块定义。

<tiles-definitions>
  <definition name="myapp.homepage" template="/layouts/classic.jsp">
    <put-attribute name="title" value="Tiles tutorial homepage" />
    <put-attribute name="header" value="/tiles/banner.jsp" />
    <put-attribute name="menu" value="/tiles/common_menu.jsp" />
    <put-attribute name="body" value="/tiles/home_body.jsp" />
    <put-attribute name="footer" value="/tiles/credits.jsp" />
  </definition>
</tiles-definitions>

并使用tiles:addAttribute将页面“注入”jsp。

根据我的理解,任何不是您要导航到的页面的gsp(因此“tiles”)都应该放在grails中的布局中。所以我想我所说的问题是1.你如何最有效地使用grails / sitemesh,以及2.如果布局不是我所相信的那样,那么它是什么?

2 个答案:

答案 0 :(得分:2)

我认为applyLayout和render之间的主要区别在于applyLayout更多地用于将整体样式/定位应用于页面的特定页面或部分。 例如使用

<g:applyLayout name="myLayout" url="http://www.google.com" />

会将您的“myLayout”应用到google.com网址页面并将其放在包含该标记的位置。

我对渲染标记何时应该用于其他所有内容的理解。为给定的模板gsp部分渲染(创建html)。能够使用这种语法为集合中的每个项目反复渲染html(aka模板)的特定部分特别方便

<g:render template="displaybook" collection="${books}" /> 

但是你可以使用像

这样的东西
<g:applyLayout name="myLayout" template="displaybook" params="[books: books]" />

当您想要将“myLayout”的不同布局应用于模板“displaybook”时。

希望有所帮助

汤姆

答案 1 :(得分:1)

以下是excellent example,可以回答有关如何最有效地使用grails / sitemesh的问题。