簡體   English   中英

在Spring應用程序中從FreeMarker獲取模板文本

[英]Getting template text from FreeMarker in Spring app

在我的Spring應用程序中,我想使用FreeMarker生成將由我的應用程序發送的電子郵件文本。 生成的文本永遠不會返回到視圖,因此我不需要配置FreeMarker視圖解析器。 該文檔似乎表明我應該像這樣配置一個FreeMarkerConfigurationFactoryBean

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

一旦我配置了這個bean,我如何實際獲得為特定模板生成的文本,以及特定的變量Map。 換句話說,后面是什么代碼:

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中添加一些額外的配置以確保緩存模板?

干杯,唐

這樣的事情應該有效

在您提供的代碼之前,初始化:

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章。集成視圖技術

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM