Grails <g :set> tag not executed inside custom tag

标签 grails taglib

我有一个名为 <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/

相关文章:

java - jSTL taligb 中的 HTML5 data-* 属性

java - 使用 grails 的多语言 jasper 报告

grails损坏的语言参数

grails - 将GSP页面呈现到Web应用子文件夹中的文件

java - 我们如何在自定义标签中使用现有的标签库功能?

java - 如何在grails gform中呈现java.time.localdate

xml - JSPX namespace 对 EL 函数不可见?

chalice 3.3 : Is only the first save() persisted?

grails - Grails 中是否有首选/标准方式将表单参数绑定(bind)到域对象列表?

c++ - 将 TagLib 链接到 Qt 时出错