Domanda

Nella mia app Spring, vorrei usare FreeMarker per generare il testo delle e-mail che verranno inviate dalla mia applicazione. Il testo generato non verrà mai restituito alla vista, quindi non è necessario configurare un risolutore di viste di FreeMarker. La documentazione sembra indicare che dovrei configurare un FreeMarkerConfigurationFactoryBean in questo modo

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

Una volta configurato questo bean, come posso effettivamente ottenere il testo che viene generato per un modello particolare, con una particolare mappa di variabili. In altre parole, quale codice viene dopo:

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

Moduli di primavera sembra fornire un'integrazione alternativa tra Spring e FreeMarker che rende molto più semplice il recupero del testo del modello ovvio, ma preferirei non aggiungere una dipendenza aggiuntiva alla mia app a meno che non sia assolutamente necessario.

Inoltre, devo aggiungere qualche configurazione aggiuntiva a FreeMarkerConfigurationFactoryBean per assicurarmi che i template siano memorizzati nella cache?

Saluti, Don

È stato utile?

Soluzione

Qualcosa del genere dovrebbe funzionare

Prima del codice fornito, inizializza:

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

Quindi, dopo il codice, aggiungi:

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

Ecco il mio 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>

E la tua domanda di memorizzazione nella cache ...

Ho visto solo una proprietà del bean 'cache' in un bean 'viewResolver', che hai detto che non userai.

Vedi anche: Capitolo 14. Integrazione delle tecnologie di visualizzazione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top