如何在Grails模板体()中分配GSP变量?

时间:2011-06-21 19:50:23

标签: templates grails gsp

在我的Grails 1.3.7应用程序中,我想使用模板从视图中分解出周围的HTML。但是,GSP变量赋值在包含的body()中不起作用。我该如何做以下事情?

_ aTemplate.gsp:

<div class="example">
    <% out <<  body() %>
</div>

aView.gsp:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta name="layout" content="main" />
</head>
<body>
    <g:set var="foo" value="${42}"/>
    <% assert foo == 42 : foo %>

    <tmpl:/aTemplate>
        <g:set var="bar" value="${6}"/>
        <% assert bar == 6 : bar %>
    </tmpl:/aTemplate>
</body>
</html> 

bar的分配不起作用:当我http://localhost:8080/myApp/aView.gsp

bar断言失败
org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException:
 Error executing tag<g:render>: Assertion failed:
(bar == 6). Values: bar = null
 at /Users/jbeutel/proj/grailsSandboxes/myApp/grails-app/views/aView.gsp:13 

如何让模板body()正常工作?

或者,还有其他方法可以在保持平衡的同时分解出周围的HTML吗?我的用例不在顶层,所以我没有尝试过使用布局。如果我使用TagLib闭包而不是模板文件,变量赋值是有效的,但是我不想将大量HTML放入闭包中,所以我需要将不平衡的HTML放到模板文件中(即之前单独的模板)并在身体之后)。还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以将.gsp中的变量传递到共享模板中,然后可以按如下方式考虑。我这样做是为了隐藏登录信息。链接在我的公共标题中,如果它们在login.gsp页面上

<g:render template="/layouts/header" model="['hidelogin':true]"/>

然后在_header.gsp

<g:if test="${!hidelogin}">
    //show your login link
</g:if>