<g:applyLayout /> 和 <g:render template /> 有啥区别

Posted

技术标签:

【中文标题】<g:applyLayout /> 和 <g:render template /> 有啥区别【英文标题】:what is the difference between <g:applyLayout /> and <g:render template /><g:applyLayout /> 和 <g:render template /> 有什么区别 【发布时间】:2013-01-20 14:38:46 【问题描述】:

正如标题所说...我正在使用 grails 构建网页,并且我知道 grails 使用 sitemesh 来网格化 GSP。我做了一些谷歌搜索,发现了 2 种“平铺”gsps 的方法(g:applyLayout 和 g:render 模板标签)。两者似乎都在做“平铺”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(因此“图块”)都应放入 grails 中的布局中。所以我想我同意的问题是 1. 你如何最有效地使用 grails/sitemesh 来做到这一点,以及 2. 如果布局不是我被引导相信的那样,那么它是什么?

【问题讨论】:

【参考方案1】:

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

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

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

我对何时应该将渲染标签用于几乎所有其他事情的理解。为给定的模板 gsp 部分呈现(创建 html)。能够使用这种语法为集合中的每个项目一遍又一遍地呈现 html 的特定部分(又名模板)特别方便

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

但是你可以使用类似的东西

<g:applyLayout name="myLayout" template="displaybook" params="[books: books]" />

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

希望有帮助

汤姆

【讨论】:

【参考方案2】:

这是一个excellent example,它回答了您关于如何最有效地使用 grails/sitemesh 的问题。

【讨论】:

以上是关于<g:applyLayout /> 和 <g:render template /> 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

>> 和 << 在 Python 中是啥意思?

Rc<RefCell<T>> 和 RefCell<Rc<T>> 有啥区别?

Rc<RefCell<T>> 和 RefCell<Rc<T>> 有啥区别?

用 < 和 > 替换 : < 和 > 是不是足以防止 XSS 注入?

如果 "x=(date<<7)>>12" 和 y=date<<7;z=y>>12; 为啥 x 和 z 的评估不同?

节点和元素