2008-10-23 8 views
18

В моем приложении Spring я хотел бы использовать FreeMarker для генерации текста писем, которые будут отправлены моим приложением. Сгенерированный текст никогда не будет возвращен в представление, поэтому мне не нужно настраивать распознаватель вида FreeMarker. Документация, кажется, указывает, что я должен настроить FreeMarkerConfigurationFactoryBean как этотПолучение текста шаблона из приложения FreeMarker in Spring

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

После того, как у меня есть этот компонент, сконфигурированный как я на самом деле получить текст, который генерируется для конкретного шаблона, с конкретной карты переменных. Другими словами, какой код приходит после того, как:

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, кажется, обеспечивает альтернативную интеграцию между Spring и FreeMarker, что делает извлечение текста шаблона очень очевидно, но я предпочел бы не добавить дополнительную зависимость мое приложение если это абсолютно необходимо.

Кроме того, нужно ли добавить дополнительную конфигурацию в FreeMarkerConfigurationFactoryBean, чтобы гарантировать, что шаблоны кэшированы?

Приветствия, Дон

ответ

22

Что-то, как это должно работать

Перед кода вы предоставили, инициализировать:

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

Затем, после того, как код, добавьте:

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

Вот мой 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> 

И ваш вопрос кэширования ...

Я видел только свойство компонента «кэш» в компоненте «viewResolver», который вы сказали, что вы не будете использовать.

Смотрите также: Chapter 14. Integrating view technologies

+0

Спасибо, предположительно переменная вы назвали конфигурации боб я назвал freemarkerConfiguration? – 2008-10-23 18:35:28