在grails应用程序中使用sitemesh是否有很好的教程?

我是一个非常有经验的Grails开发人员,但我的大部分经验是使用Grails将JSON / XML提供给Flex应用程序和一些相对简单的HTML网站。

我一直深入到在grails中使用sitemesh集成,我正在努力寻找一些更复杂configuration的最佳实践,我很好奇,如果有任何好的教程或例子。 原来的Sitemesh网站没有那么有用,因为它所谈论的标签并没有直接暴露在Grails中。

谷歌search主要是显示旧的邮件列表post和一些香草sitemesh的东西,这是帮助我进一步移动,但它是很多的试验和错误。

我完全理解基本的g:layoutTitle,g:layoutHead和g:layoutBody标记是如何工作的。 这些都很简单,有据可查。

我希望看到的例子有:

  • g:applyLayout – 关于这方面的文档很薄弱,我不完全理解主要文档中build议的用法。 这与设置meta name='layout' content='foo'属性有什么不同?

  • g:pageProperty – 关于如何通过在正在装饰的页面中将值设置为元标签来将属性拖放到主模板中的一些更好的示例。 pageProperty中的grails文档仅显示正在提交的正文的onload属性。 我想你也可以在这里使用元标记值,还有其他的东西吗?

  • 你可以使用多个级别的sitemesh布局? 我的testing似乎让我觉得我不能,但似乎降低了可重用性。 我认为这里的答案是g:applyLayout的一些用法,但这正是我最苦恼的地方。

那么,我可以回答一下:

你的第一个和第三个问题是相关的,因为你不能使用meta标签链接布局。

您的最终页面应该有一个meta标签,但是如果您想在另一个布局的顶部分层布局,可以在子布局的顶部放置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,所​​以我不能在这里抛出更好的例子,对不起。

g:pageProperty是一个function非常强大,但logging却很差的文件。 让我说在我的布局,我指定在哪里把这样的内容:

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

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

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

Sitemesh将获取内容标签,而不pipe页面的HTML中的实际位置,并将其放置在布局stream程所需的位置。

更妙的是,如果在我的页面中,我提供了一个模板,它也指定了一个标题为“header”的内容区域,它将覆盖第一个声明,它将成为将在最终布局中呈现的模板内容。

Sitemesh和Grails一起是一个非常强大的function。 我用得越多 – 我越喜欢它。 你可以装饰我们的网站的任何部分:你可以有错误消息,工具提示,新闻线,评论等的布局。只要注意,你甚至可以做你的网页,并具有多层次的装饰(没有需要<content>):

/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> 

请参阅我们的Rabbtor Showcase App,了解一些非常好的示例

  • 创build嵌套的布局
  • 渲染模板
  • 将布局应用于页面的特定部分

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