0

Grails GSP中有没有办法替换以下内容

<tmpl:/templates/header />
<!-- tmpl namespace call is equivalent to <g:render template="/templates/header" /> -->    

<!-- definition of inner content -->

<tmpl:/templates/footer />

使用外部模板?本质上,一种导入包装外部模板的方法,

<outertemplate:templatename>
<!-- header will be rendered from outer template -->

<!-- definition of inner content -->

<!-- footer will be rendered from outer template -->
</outertemplate:templatename>

并且外部模板的定义类似于

<!-- definition of header content -->

<!-- placeholder or attr for inner content -->

<!-- definition of footer content -->

将包装内容封装在一个模板而不是两个模板中。IIRC 在 JSF 下有一种方法可以做到这一点,但我在 GSP 下找不到等价物。

4

2 回答 2

1

好的,所以我一直在寻找Grails 的 SiteMesh 布局支持,它允许我以比模板更雄辩的方式定义常用的视图标记。

所以页眉和页脚内容可以放在布局内

<html>
    <head>
        <title><g:layoutTitle/></title>
        <g:layoutHead />
    </head>
    <body>
        <!-- HEADER CONTENT DEFINED HERE (or for stuff in head in the head above -->
        <g:layoutBody />
        <!-- FOOTER CONTENT DEFINED HERE -->
    </body>
</html>

然后使用布局,

<html>
    <head>
        <title>An Example Page</title>
        <meta name="layout" content="main" />
    </head>
    <body>This is my content!</body>
</html>

我认为这比页眉和页脚模板更干净。

您还可以嵌套布局。

于 2013-04-10T16:15:26.140 回答
1

您可以使用标签库创建类似的内容。

class SimpleTagLib {
    def emoticon = { attrs, body ->
       out << body() << (attrs.happy == 'true' ? " :-)" : " :-(")
    }
}

emoticon这定义了一个可以在 gsp 中使用的标签,如下所示:

<g:emoticon happy="true">Hi John</g:emoticon>

body()用于渲染标签正文内容。

(示例是从官方grails 文档中复制的)

于 2013-03-26T22:25:51.500 回答