我有一个名为 <mk:pageViewTag>
的自定义标签首先呈现 .gsp
模板,然后在里面执行它的主体:
标签库(UtilTagLib.groovy):
string namespace = "mk"
def pageViewTag = { attrs, body ->
out << render(template: '/templates/pageTagView') {
body()
}
}
...
我渲染的模板(templates/_pageTagView.gsp):
<body>
${ body() }
...
</body>
GSP 我在 (test.gsp) 上使用自定义标记:
<mk:pageViewTag>
<g:set name="test" value="${1}">
${test?:0} %{--Here, I got 0. Variable test does not exist!--}%
</mk:pageViewTag>
除了 <g:set>
之外,一切正常标签,它的表现不符合我的预期。 Grails 根本看不到我声明的变量。
在上面的示例中,我声明了变量 test
并用整数 1
初始化它。作为输出,我得到 0
.
根据Grails Docs我可以使用scope
属性,设置为 request
时可以解决问题。 .
有什么办法可以解决这个问题吗?为什么会出现这种情况?
注意:mk:pageViewTag
的内部很大,所以我不能在外面的任何地方声明一个变量。
最佳答案
并不完美,但快速解决方案,不需要技巧(嗯,几乎)。
我首先执行 body
,然后将其包含为模板正文。
Taglib (UtilTagLib.groovy):
string namespace = "mk"
def pageViewTag = { attrs, body ->
// Render body ahead!
String renderedBody = body()
out << render(template: '/templates/pageTagView') {
renderedBody
}
}
...
关于Grails <g :set> tag not executed inside custom tag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12824052/