Grails 的 layout

grails利用SiteMesh来支持layout。

在grails-app/views/layout目录下保存layout文件。

一个典型的layout如下:[code]

[/code]三个关键的元素layoutHead,layoutTitle,layoutBody。例如表示将该文件中的head部分和其他引用这个layout的gsp文件结合在一起,是将部分结合在一起。

在grails-app/views/layout目录下有一个main.gsp文件,我们将这个文件中的

部分注释掉,然后再刷新页面,你会发现页面上的logo标志不见了,这就验证了上面的理论。

有许多方法触发layout,其中一个最简单的就是加入标签,例如[code]

,在grails-app/views/layout目录下的main.gsp文件将会被引用。另外我们还可以在一个controller中指定一个layout。例如:

class BookController {

static layout = ‘customer’

}[/code]这个controller控制的views都可以引用这个layout。

另外我们还可以通过规约来使用layout,例如我们新建一个book.gsp文件,那么Bookcontroller所能控制的views都能引用这个layout,如果你只想给其中一个使用,那么你可以新建一个gsp文件,该文件名字和controller里面的action名字一样,这样只能被这个action使用,假如同时定义了上述了两个layout,那么当执行到那个指定的action时就会执行那个与其同名的layout。

我们可以修改grails-app/conf/Config.groovy中的grails.sitemesh.default.layout来指定默认的layout。

如果你想在本页面引用外部的内容,你可以使用<g:include>这个标签,例如:<g:include controller=’book’ action=’list’></g:include>

另外使用<g:applyLayout>,可以对内容区域、URL、template应用模板,例如:[code]<g:applyLayout name=”myLayout” template=”bookTemplate” collection=”${books}” />

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

<g:applyLayout name=”myLayout”>

The content to apply a layout to
</g:applyLayout>[/code]