Подтвердить что ты не робот

Получение текста шаблона из FreeMarker в приложении Spring

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

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

Как только у меня этот bean настроен, как я действительно получаю текст, сгенерированный для определенного шаблона, с конкретной Map of variables. Другими словами, какой код появляется после:

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

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

Cheers, Дон

4b9b3361

Ответ 1

Что-то вроде этого должно работать

Перед предоставленным кодом инициализируйте:

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>

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

Я видел только кеш-память bean в 'viewResolver' bean, который, как вы сказали, не будет использоваться.

См. также: Глава 14. Интеграция технологий просмотра