2008-10-23 8 views
18

In meiner Spring App möchte ich FreeMarker verwenden, um den Text von E-Mails zu generieren, die von meiner Anwendung gesendet werden. Der generierte Text wird niemals zur Ansicht zurückgegeben, so dass ich keinen FreeMarker-Ansichtsresolver konfigurieren muss. Die Dokumentation scheint darauf hinzudeuten, dass ich eine FreeMarkerConfigurationFactoryBean wie dieseGetting Vorlage Text von FreeMarker im Frühjahr App

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

konfigurieren sollte Sobald ich diesen Bean konfiguriert habe, wie bekomme ich tatsächlich den Text, der für eine bestimmte Vorlage erzeugt wird, mit einer bestimmten Karte von Variablen. Mit anderen Worten, was Code kommt nach:

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 eine alternativen Integration zwischen Frühling und Freemarker, die die Vorlage macht zu schaffen, scheint Text sehr offensichtlich abrufen, aber ich würde es vorziehen, nicht eine zusätzliche Abhängigkeit zu meinen App hinzufügen es sei denn, es ist absolut notwendig.

Muss ich der FreeMarkerConfigurationFactoryBean auch eine zusätzliche Konfiguration hinzufügen, um sicherzustellen, dass die Vorlagen zwischengespeichert werden?

Cheers, Don

Antwort

22

So etwas sollte Ihnen zur Verfügung gestellten

Vor dem Code arbeiten, initialisieren:

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

Dann, nachdem Sie den Code hinzufügen:

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); 

Hier ist meine 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> 

Und Ihre Caching-Frage ...

ich nur eine Bean-Eigenschaft 'Cache' in 'viewResolver' Bohne gesehen haben, die Sie nicht verwenden werden, sagte wird.

Siehe auch: Chapter 14. Integrating view technologies

+0

Danke, vermutlich die Variable, die Sie Konfiguration genannt haben, ist die Bohne I freemarkerConfiguration genannt habe? –

+0

Ja, in der von uns verwendeten Klasse ist die Variable 'configuration' vom Typ 'Configuration'. Siehe meinen überarbeiteten Post ^^ –

+0

noch gibt es keine Konfigurationsdefinition. –