Grails 标记g:include未正确地将模型传递给视图

Grails 标记g:include未正确地将模型传递给视图,grails,Grails,我已经为这些问题挣扎了几个小时,并得出结论,这可能是2.0.0.RC1的一个bug 起初我以为这是我正在做的项目,但后来我创建了一个完整的新项目,并且能够重新创建bug。我正在使用Grails2.0.0.RC1 当我试图在GSP中包含一个模型对象时,就会出现错误,例如: /您好/index.gsp /hello/include.gsp文件包含以下内容: /您好/include.gsp 有什么想法吗?非常感谢您的帮助 谢谢, -Cesar这可能是一个bug,但根据文档,include标签专门设计用

我已经为这些问题挣扎了几个小时,并得出结论,这可能是2.0.0.RC1的一个bug

起初我以为这是我正在做的项目,但后来我创建了一个完整的新项目,并且能够重新创建bug。我正在使用Grails2.0.0.RC1

当我试图在GSP中包含一个模型对象时,就会出现错误,例如:

/您好/index.gsp /hello/include.gsp文件包含以下内容:

/您好/include.gsp 有什么想法吗?非常感谢您的帮助

谢谢,
-Cesar

这可能是一个bug,但根据文档,include标签专门设计用于在当前响应中包含另一个控制器/操作或视图的响应,而不仅仅是额外的GSP。如果您想在页面中“包含”另一个GSP,那么确实应该使用render标记。我已验证您的代码是否与呈现标记正确配合,并将
include.gsp
重命名为
\u include.gsp
并使标记成为
。我得到了以下输出:

此数据来自模型:

内容:内容

使用g:render: 此数据来自包含的模型:

内容:包括

我还尝试向控制器添加另一个操作,以返回包含的内容并呈现include.gsp,然后使用g:include标记在页面中输出该操作,结果成功:

def include() {
    def includeModel = [:]
    includeModel.content = 'includeModel...'
    includeModel      
}
然后在index.gsp中我添加了:

<g:include action="include"/>

我得到:

此数据来自模型:

内容:内容

使用g:render: 此数据来自包含的模型:

内容:包括

使用g:include with action 此数据来自包含的模型:

内容:包括

此外,如果视图与控制器中的方法同名,则不必在控制器中指定render(视图:'viewname,…)。您只需返回模型,Grails就会自动选择与控制器操作同名的GSP文件


话虽如此,您试图使用include标记所做的似乎仍然有效,我无法解释为什么无效(而且标记的源代码也没有像预期的那样显示在文档的底部)。如果渲染标签不适合您,我建议您提交JIRA。

我将尝试您的建议。我只是希望我不需要重构我们的web应用程序中的所有这些包含,因为我正在考虑您提到的调用控制器操作的选项。但是,这在升级到2.0.0.RC1之前是有效的。我最终接受了你的建议。并将g:include的所有用法重构为g:render。谢谢你的推荐。我在grails用户邮件列表中也提到了这个问题,希望在某个时候会有一个更好的答案,甚至可能需要一个JIRA。似乎在tag属性中传递的模型应该覆盖包含页面的模型。至少重构在这段时间内起了作用!我为此而创建,并在版本2.0-RC2中得到修复。
<p>This data is coming from the included model:</p>
<p>content: ${content}</p>
This data is coming from the model:
content: content...
This data is coming from the included model:
content: content...
def include() {
    def includeModel = [:]
    includeModel.content = 'includeModel...'
    includeModel      
}
<g:include action="include"/>