В моем приложении 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
не работает: утверждение bar
не выполняется, когда я получаю http://localhost:8080/myApp/aView.gsp
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
Как сделать так, чтобы тело шаблона () работало как обычно?
В качестве альтернативы, есть ли какой-то другой способ, которым я мог бы учитывать окружающий HTML, сохраняя его сбалансированным? Мой вариант использования не на верхнем уровне, поэтому я не пробовал использовать макеты. Присвоение переменной работает, если я использую замыкание TagLib вместо файла шаблона, но я не хочу помещать много HTML в замыкание, поэтому мне все равно придется помещать несбалансированный HTML в файлы шаблона (то есть отдельные шаблоны перед и после тела). Есть ли лучший способ?