2008-10-23 59 views
18

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

<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 modules似乎提供了春天和FreeMarker的之間的替代性整合,這使得檢索模板文本非常明顯的,但我不希望一個額外的依賴添加到我的應用程序除非這是絕對必要的。

此外,我是否需要添加一些額外的配置到FreeMarkerConfigurationFactoryBean以確保模板被緩存?

乾杯, 唐

回答

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="[email protected]" /> 
    <property name="subject" value="Email Subject" /> 
</bean> 

而且你的緩存問題...

我只看到一個「ViewResolver的」豆,你說你不會使用Bean屬性「緩存」。

參見:Chapter 14. Integrating view technologies

+0

謝謝你,想必你已經命名的配置變量是豆我命名freemarkerConfiguration? – 2008-10-23 18:35:28

相關問題