Question

Dans mon application Spring, j'aimerais utiliser FreeMarker pour générer le texte des courriels qui seront envoyés par mon application. Le texte généré ne sera jamais renvoyé à la vue, je n'ai donc pas besoin de configurer un résolveur de vues FreeMarker. La documentation semble indiquer que je devrais configurer un FreeMarkerConfigurationFactoryBean comme ceci

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

Une fois ce bean configuré, comment puis-je obtenir le texte généré pour un modèle particulier, avec une mappe de variables particulière. En d'autres termes, quel code vient après:

String templateName = "email"
Map templateVars = new HashMap();
templateVars.put("firstName", "john");
templateVars.put("surname", "doe");    
// Now how do I get the template text?

Les modules de Spring semblent fournir une intégration alternative entre Spring et FreeMarker, ce qui facilite l'extraction du texte du modèle. Cela va de soi, mais je préférerais ne pas ajouter de dépendance à mon application, sauf en cas d'absolue nécessité.

De plus, dois-je ajouter une configuration supplémentaire à FreeMarkerConfigurationFactoryBean pour garantir la mise en cache des modèles?

Salut, Don

Était-ce utile?

La solution

Quelque chose comme ça devrait marcher

Avant le code que vous avez fourni, initialisez:

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

Ensuite, après votre code, ajoutez:

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

Voici mon 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>

Et votre question de mise en cache ...

J'ai seulement vu une propriété de bean 'cache' dans un bean 'viewResolver' que vous avez dit ne pas utiliser.

Voir aussi: Chapitre 14. Intégration des technologies d'affichage

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top