Grails 圣杯<;g:set>;标记未在自定义标记内执行
我有一个名为Grails 圣杯<;g:set>;标记未在自定义标记内执行,grails,taglib,Grails,Taglib,我有一个名为的自定义标记,它首先呈现.gsp模板,然后在其中执行其主体: Taglib(UtilTagLib.groovy): string namespace=“mk” def pageViewTag={attrs,body-> out不是完美的,但快速解决方案不需要技巧(很好,几乎可以)。 我首先执行body,然后将其作为模板body包含 Taglib(UtilTagLib.groovy): string namespace = "mk" def pageViewTag = { attrs
的自定义标记,它首先呈现.gsp
模板,然后在其中执行其主体:
Taglib(UtilTagLib.groovy):
string namespace=“mk”
def pageViewTag={attrs,body->
out不是完美的,但快速解决方案不需要技巧(很好,几乎可以)。
我首先执行body
,然后将其作为模板body包含
Taglib(UtilTagLib.groovy):
string namespace = "mk"
def pageViewTag = { attrs, body ->
// Render body ahead!
String renderedBody = body()
out << render(template: '/templates/pageTagView') {
renderedBody
}
}
...
<body>
${body}
...
</body>
string namespace=“mk”
def pageViewTag={attrs,body->
//身体在前面!
字符串renderedBody=body()
outstring namespace=“mk”
def pageViewTag={attrs,body->
outg:set需要一个var属性,而不是名称:我在模板中声明了一个grails变量,并在父gsp文件中使用它(其中包括模板)
Ex:Parent.gsp包括模板:\ u child.gsp,其中包含“
”。在Parent.gsp中打印变量“a”将显示“null”。
因此,我们发现在呈现模板时插入带有变量的模板或设置变量时无法工作。因为呈现模板需要时间并且与父页面异步。在呈现完成之前,我们无法确定变量初始化
如果范围设置为“request”,那么我们说这个变量应该在整个请求周期内可见,并且它们存储在请求中以供进一步处理或访问。
建议使用
或
。
请参阅以下有关如何使用作用域的链接:
可能在计算中计时。可能通过从taglib调用set来复制它在标记中所做的事情?@Neoryder timing,可能。我希望我能按照你的建议做,但下面的逻辑并不像我在示例中所说的那样直截了当。不幸的是,当直接从视图/模板使用render标记时,这没有帮助,例如:…
和_xx.gsp:${body()}
(请参阅)
<mk:pageViewTag>
<g:set name="test" value="${1}">
${test?:0} %{--Here, I got 0. Variable test does not exist!--}%
</mk:pageViewTag>
string namespace = "mk"
def pageViewTag = { attrs, body ->
// Render body ahead!
String renderedBody = body()
out << render(template: '/templates/pageTagView') {
renderedBody
}
}
...
string namespace = "mk"
def pageViewTag = { attrs, body ->
out << render(template: '/templates/pageTagView', model:[body: body()])
}
<body>
${body}
...
</body>