Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails 圣杯<;g:set>;标记未在自定义标记内执行_Grails_Taglib - Fatal编程技术网

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()
out
string 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>