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' bean 中看到了一个bean 属性'cache',你说你不会使用它。

另请参阅:第 14 章。集成视图技术

于 2008-10-23T18:23:43.397 回答