3

ユーザーに送信したいさまざまな種類の HTML メールがありますが、各メールは同じレイアウト (emailLayout.gsp) を使用しています。このメール (gsp) を文字列にレンダリングして、メール メソッドで送信する必要があります。

このコードを使用するとこれは機能しますが、grails フィルターまたはサービスでメールを送信する必要があるため、groovyPageRenderer.render() メソッドを使用する必要があります (上記の 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 レイアウトをレンダリングしないのはなぜですか?

ご協力いただきありがとうございます!

4

1 に答える 1

9

mrhaki による groovyPageRenderer の使用に関する有益な投稿は次のとおりです

実際に、電子メールの確認をレンダリングする例で使用方法を示します。また、Sitemesh が機能しない理由についても説明しています。

GSP ビューとテンプレートでタグ ライブラリのタグを使用できます。Sitemesh レイアウトは使用できません。PageRenderer は、Sitemesh レイアウトに必要なリクエスト スコープの外で動作します。

したがって、Sitemesh を使用できない場合は、テンプレートを再配置する必要があります。たとえば、レイアウトを GSP に入れることができますemailConfirmation

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

しかし、共通のレイアウトを使用する複数の電子メール テンプレートがあるため、このアプローチは非常に反復的になります。emailLayout代わりに、このようなGSP を持つことができます

<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" />
于 2013-11-03T00:33:29.143 に答える