在我的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放到模板文件中(即之前单独的模板)并在身体之后)。还有更好的方法吗?
答案 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>