Obtendo texto do modelo de FreeMarker no aplicativo Primavera
-
04-07-2019 - |
Pergunta
Em meu aplicativo Spring, eu gostaria de usar FreeMarker para gerar o texto de e-mails que serão enviados pelo meu aplicativo. O texto gerado nunca será retornado para a visão, então eu não preciso configurar um resolvedor vista FreeMarker. A documentação parece indicar que devo configurar um FreeMarkerConfigurationFactoryBean como este
<bean id="freemarkerConfiguration" class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean">
<property name="templateLoaderPath" value="/WEB-INF/freemarker/"/>
</bean>
Assim que eu tiver essa feijão configurado como eu realmente obter o texto que é gerado para um modelo específico, com um determinado Mapa de variáveis. Em outras palavras, o código vem depois:
String templateName = "email"
Map templateVars = new HashMap();
templateVars.put("firstName", "john");
templateVars.put("surname", "doe");
// Now how do I get the template text?
módulos Primavera parece fornecer uma integração alternativa entre Primavera e FreeMarker o que torna a recuperar o texto do modelo muito óbvia, mas eu prefiro não adicionar uma dependência adicional para meu aplicativo, a menos que seja absolutamente necessário.
Além disso, eu preciso adicionar um pouco de configuração extra para o FreeMarkerConfigurationFactoryBean para garantir que os modelos são armazenados em cache?
Cheers, Don
Solução
Algo como isso deve funcionar
Antes do código que você forneceu, initialize:
MailSender mailSender = new JavaMailSenderImpl();
SimpleMailMessage message = new SimpleMailMessage();
Então, depois de seu código, add:
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);
Aqui está a minha 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 a sua pergunta cache ...
Eu só vi uma propriedade de bean 'cache' em um 'viewResolver' feijão, o que você disse que não vai usar.
Veja também: Capítulo 14. Integrando tecnologias vista ??a >