18

私の Spring アプリでは、FreeMarker を使用して、アプリケーションによって送信される電子メールのテキストを生成したいと考えています。生成されたテキストがビューに返されることはないため、FreeMarker ビュー リゾルバーを構成する必要はありません。ドキュメントは、このように FreeMarkerConfigurationFactoryBean を構成する必要があることを示しているようです

<bean id="freemarkerConfiguration" class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean">
   <property name="templateLoaderPath" value="/WEB-INF/freemarker/"/>
</bean>

この Bean を構成したら、特定のテンプレート用に生成されたテキストを、特定の変数マップを使用して実際に取得するにはどうすればよいでしょうか。つまり、次のコードは次のようになります。

String templateName = "email"
Map templateVars = new HashMap();
templateVars.put("firstName", "john");
templateVars.put("surname", "doe");    
// Now how do I get the template text?

Spring モジュールは、Spring と FreeMarker の間の代替統合を提供しているように見えますが、これにより、テンプレート テキストの取得が非常に明確になりますが、絶対に必要でない限り、アプリに追加の依存関係を追加したくありません。

また、テンプレートが確実にキャッシュされるように、FreeMarkerConfigurationFactoryBean に追加の構成を追加する必要がありますか?

乾杯、ドン

4

1 に答える 1

22

このようなものが動作するはずです

提供したコードの前に、初期化します。

MailSender mailSender = new JavaMailSenderImpl();
SimpleMailMessage message = new SimpleMailMessage();

次に、コードの後に​​次を追加します。

StringBuffer content = new StringBuffer();
try {
    content.append(FreeMarkerTemplateUtils.processTemplateIntoString(
        configuration.getTemplate(templateName), templateVars));
} catch (IOException e) {
    // handle
} catch (TemplateException e) {
    // handle
}

message.setFrom(getMailFromName() + " <" + getMailFromAddr() + ">");
message.setTo(getMailTo());
if (getCcTo() != null)
    message.setCc(getCcTo());
message.setSubject(getSubject());
message.setText(content.toString());

mailSender.send(message);

これが私のapplicationContext.xmlです:

<bean id="freemarkerMailConfiguration"
  class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean">
    <property name="templateLoaderPath" value="/WEB-INF" />
</bean>
<bean id="yourEmailServiceClass" class="YourEmailServiceClass">
    <property name="mailSender" ref="mailSender" />
    <property name="freemarkerMailConfiguration" ref="freemarkerMailConfiguration" />
    <property name="freemarkerTemplate" value="email.ftl" />
    <property name="mailFromName" value="John Q. Programmer" />
    <property name="mailFromAddr" value="john.q.programmer@mail.com" />
    <property name="subject" value="Email Subject" />
</bean>

そして、あなたのキャッシングの質問...

あなたが使用しないと言った「viewResolver」ビーンでビーンプロパティ「キャッシュ」を見ただけです。

関連項目:第 14 章 ビュー技術の統合

于 2008-10-23T18:23:43.397 に答える