Frage

In meinem Frühling app, würde Ich mag Freemarker verwenden, um den Text von E-Mail zu generieren, die durch meine Anwendung gesendet werden. Der erzeugte Text wird nie die Ansicht zurückgegeben werden, damit ich keine Freemarker Ansicht Resolver zu konfigurieren. Die Dokumentation scheint darauf hinzudeuten, dass ich eine FreeMarkerConfigurationFactoryBean wie diese konfiguriert werden sollte

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

Nachdem ich diese Bohne konfigurierte 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?

Federmodule scheint eine alternative Integration zwischen Frühling und Freemarker zu schaffen, die den Schablonentext macht das Abrufen sehr offensichtlich, aber ich würde es vorziehen, keine zusätzliche Abhängigkeit zu meinen App hinzufügen, wenn es absolut notwendig ist.

Auch muss ich einige zusätzliche Konfiguration in die FreeMarkerConfigurationFactoryBean hinzufügen, um sicherzustellen, dass die Vorlagen zwischengespeichert werden?

Cheers, Don

War es hilfreich?

Lösung

So etwas sollte funktionieren

Bevor Sie den Code zur Verfügung gestellt, initialisieren:

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

Dann, nachdem Sie den Code hinzu:

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 mein 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>

Und Ihre Caching-Frage ...

Ich habe nur eine Bean-Eigenschaft ‚Cache‘ in ‚viewResolver‘ Bohne gesehen, was Sie sagten, Sie werden nicht werden.

Siehe auch: Kapitel 14. Ansicht Technologien Integration

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top