使用布局渲染 gsp / 视图不起作用

Posted

技术标签:

【中文标题】使用布局渲染 gsp / 视图不起作用【英文标题】:Rendering gsp / view with layout doesn't work 【发布时间】:2013-11-13 20:19:10 【问题描述】:

我有不同类型的 html 电子邮件要发送给我的用户,但每封电子邮件都使用相同的布局 (emailLayout.gsp)。我需要将此电子邮件 (gsp) 呈现为字符串,以通过电子邮件方法发​​送。

使用此代码确实有效,但我需要它与 groovyPageRenderer.render() 方法一起使用,因为我需要在 grails 过滤器或服务中发送电子邮件(上述 2 个注释掉的示例不起作用):

    //def emailContent = groovyPageRenderer.render(view: '/email/emailConfirmation', model: [userInstance: userInstance])
    //def emailContent = g.render(view: "/email/emailConfirmation", model: [userInstance: userInstance])
    def emailContent = g.include(view: "email/emailConfirmation.gsp", model: [userInstance: userInstance])

使用 groovyPageRenderer 不包括我的布局 html,只有 emailConfirmation.gsp 内容被渲染。所以我的 emailLayout.gsp 中的页眉和页脚丢失了。为什么 groovyPageRenderer.render() 不渲染完整的 gsp WITH 布局?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

这是一篇关于 mrhaki 使用 groovyPageRenderer 的有用帖子:http://mrhaki.blogspot.de/2012/03/grails-goodness-render-gsp-views-and.html

它实际上通过呈现电子邮件确认的示例演示了使用。它还说明了 Sitemesh 不起作用的原因。

我们可以在 GSP 视图和模板中使用标签库中的标签。不能使用 Sitemesh 布局。 PageRenderer 在请求范围之外工作,这是 Sitemesh 布局所必需的。

因此,如果无法使用 Sitemesh,则必须重新排列模板。例如,您可以将布局放入 GSP emailConfirmation

<g:render template="/email/header" />
<g:render template="/email/emailConfirmation" />
<g:render template="/email/footer" />

但由于您有多个使用通用布局的电子邮件模板,因此这种方法会变得非常重复。相反,您可以拥有这样的 GSP emailLayout

<g:render template="/email/header" />
<g:render template="$templateName" />
<g:render template="/email/footer" />

并从您的服务中传递一个拟合模型

def emailContent = groovyPageRenderer.render(view: '/email/mailLayout', model: [templateName: '/email/emailConfirmation', userInstance: userInstance])

这样您就可以为不同的电子邮件模板重复使用您的布局。

或者您在第一步渲染内容并将其传递给模板

def confirmation = groovyPageRenderer.render(template: '/email/emailConfirmation', model: [userInstance: userInstance])
def emailContent = groovyPageRenderer.render(view: '/email/mailLayout', model: [content: confirmation])

输出位置

<g:render template="/email/header" />
$content
<g:render template="/email/footer" />

【讨论】:

以上是关于使用布局渲染 gsp / 视图不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 grails gsp 中调用标签不起作用

Grails Spring Security 插件和 GSP 标签不起作用

j渲染视图后Javascript不起作用

使用自动布局调整同级视图的大小时,使用子视图重新定位 UIView 不起作用

以编程方式使用布局锚点的自动布局不起作用

视图和超级视图之间的自动布局标准空间不起作用