Spring アプリの FreeMarker からテンプレート テキストを取得する
-
04-07-2019 - |
質問
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 と FreeMarker の間の代替統合を提供しているようです。これにより、テンプレート テキストの取得が非常に明白になりますが、絶対に必要な場合を除き、アプリに追加の依存関係を追加したくないです。
また、テンプレートが確実にキャッシュされるようにするために、FreeMarkerConfigurationFactoryBean に追加の構成を追加する必要がありますか?
乾杯 ドン
解決
このようなものが機能するはずです
指定したコードの前に、以下を初期化します。
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」BeanのBeanプロパティ「cache」しか見たことがありませんが、これは使用しないとおっしゃっていました。
以下も参照してください。 第14章。ビューテクノロジーの統合
所属していません StackOverflow