在grails应用程序中使用sitemesh有什么好的教程吗?

时间:2008-12-04 02:19:18

标签: templates grails groovy gsp sitemesh

我是一位经验丰富的Grails开发人员,但我的大多数经验都是使用grails将JSON / XML提供给flex应用程序和一些相对简单的HTML网站。

我一直在深入研究使用grame中的sitemesh集成,我正在努力寻找一些更复杂的配置的最佳实践,我很好奇是否有任何好的教程或示例。 original Sitemesh网站没有那么有用,因为它所讨论的标签没有直接暴露在grails中。

谷歌搜索主要显示旧的邮件列表帖子和一些vanilla sitemesh的东西,这有助于我进一步向前移动,但这是一个很多的试验和错误。

我完全理解基本的g:layoutTitle,g:layoutHead和g:layoutBody标签是如何工作的。这些都很容易并且有很好的文档记录。

我希望看到的例子:

  • g:applyLayout - the documentation on this很弱,我不完全理解主文档中建议的用法。这与设置meta name='layout' content='foo'属性有什么不同?

  • g:pageProperty - 一些更好的示例,介绍如何通过在正在修饰的页面中将值设置为元标记来将属性提取到主模板中。 grails docs on pageProperty仅显示来自正文的onload属性。我想你也可以在这里使用元标记值,还有其他什么?

  • 您可以使用多个级别的sitemesh布局吗?我的测试似乎让我觉得我做不到,但这似乎减少了可重用性。我认为这里的答案是g:applyLayout的一些用法,但那是我最挣扎的地方。

4 个答案:

答案 0 :(得分:27)

g:pageProperty是一个非常强大但记录很少的东西。让我们说在我的布局中我指定了这样的内容:

<html>
<body>
<g:pageProperty name="page.header" />
</body>

现在,在我的页面中,我可以指定一些内容:

<content tag="header">
<!-- header -->
</content>

Sitemesh将采用内容标记,无论页面HTML中的实际位置如何,都将其放置在布局流程中所需的位置。

更好的是,如果在我的页面中我渲染了一个模板,该模板也指定了标签为“header”的内容区域,它将覆盖第一个声明,它将是将在最终布局中呈现的模板内容

答案 1 :(得分:14)

好吧,我可以回答一下:

您的第一个和第三个问题是相关的,因为您无法使用元标记链接布局。

您的最终页面应该有您建议的元标记,但是如果您想在另一个布局的顶部层叠布局,则将ag:applyLayout标记放在子布局的顶部,指向父级。

在你的edit.gsp中,你有:

<meta name="layout" content="editTemplate" />

在editTemplate.gsp中,你有:

<g:applyLayout name="baseTemplate" >
<!-- the html for the editTemplate -->
</g:applyLayout>

所以edit.gsp将使用editTemplate.gsp,它将使用baseTemplate.gsp作为基本布局。你可以根据需要链接那些。

我根本没有使用g:pageProperty,所​​以我不能在那里给你更好的例子,抱歉。

答案 2 :(得分:4)

Sitemesh和Grails是一个非常强大的功能。我越用它 - 我就越喜欢它。您可以装饰我们网站的任何部分:您可以设置错误消息,工具提示,新闻行,评论等等。只需注意您可以在您的页面中执行此操作并具有多个级别的装饰(否&lt; content&gt; needed):

/view/layout/inline-error-message.gsp

<span class="errorMessageInSomeFancyBox">
    <span class="errorIcon"></span>
    <g:layoutBody />
<span>

/views/book/create.gsp

<%-- let's decorate our error message with some fancy box --%>
<g:applyLayout name="inline-error-message">${some.error.message}</g:applyLayout>

答案 3 :(得分:0)

有关

的一些非常好的示例,请参阅我们的Rabbtor Showcase App
  • 创建嵌套布局
  • 呈现模板
  • 将布局应用于页面的特定部分

。这个应用程序实际上是我们的工具Rabbtor的展示,它允许在Grails之外使用GSP,但与Sitmesh相关的部分也适用于Grails。