【发布时间】:2012-10-10 16:24:49
【问题描述】:
我有一个名为<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 的内部很大,所以我不能在外面的任何地方声明一个变量。
【问题讨论】:
-
可能是评估时间。也许通过从 taglib 调用它来复制标签内的集合?
-
@Neoryder 计时,也许。我希望我能按照你的建议做,但是下面的逻辑并不像我在示例中那样直截了当。