Не удается использовать макросы со скоростью в шаблонах электронной почты? - PullRequest
2 голосов
/ 01 декабря 2010

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

Конфигурация xml:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">

     <property name="basenames">
     <list>
     <value>classpath:messages</value>
     <value>classpath:messages_ar</value>
     </list>
     </property>

    <property name="defaultEncoding" value="UTF-8"/>
</bean>

<bean id="velocityEngine"
        class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
        <property name="velocityProperties">
            <props>
            <prop key="resource.loader">class</prop>
            <prop key="class.resource.loader.class">org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader</prop>
            <prop key="velocimacro.library">org/springframework/web/servlet/view/velocity/spring.vm</prop>
            </props>
        </property>
    </bean>
<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath" value="/WEB-INF/classes/com/spacerdv/mailTemplates"/>
</bean>


    <!-- 

  View resolvers can also be configured with ResourceBundles or XML files. If you need
  different view resolving based on Locale, you have to use the resource bundle resolver.

   -->

<bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
  <property name="cache" value="true"/>
  <property name="prefix" value=""/>
  <property name="suffix" value=".vm"/>
  <!-- if you want to use the Spring Velocity macros, set this property to true -->
  <property name="exposeSpringMacroHelpers" value="true"/>
</bean>

при попытке прочитать текст из файла свойств, например:

<span>#springMessage("hi.message")</span>

, он ничего не читает или печатает значение по умолчанию, просто печатает:

$springMacroRequestContext.getMessage($code)

я незнаю, почему?, я что-то упустил?, любая помощь?

Ответы [ 2 ]

9 голосов
/ 01 декабря 2010

При использовании скоростного движка для отправки электронных писем вам может потребоваться настроить ваш движок, используя библиотеку velocimacro, поставляемую весной.

<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
  <property name="velocityProperties">
    <props>
      <prop key="resource.loader">class</prop>
        <prop key="class.resource.loader.class">org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader</prop>
        <prop key="velocimacro.library">org/springframework/web/servlet/view/velocity/spring.vm</prop>
    </props>
  </property>
</bean>

Вы можете проверить пример в весенней документации .

Если Spring не внедряет переменную $springMacroRequestContext в вашу модель автоматически, вы должны указать ее самостоятельно:

model.put("springMacroRequestContext", new RequestContext(request, response, getServletContext(), model));

Это в основном то, что они делают в AbstractTemplateView класс.Я полагаю, вы не сможете этого сделать, поскольку вы обрабатываете здесь электронную почту, а не веб-запросы.Но это определенно намек на то, что вы можете сделать, чтобы заставить его работать.

0 голосов
/ 02 декабря 2010
Макросы

нельзя использовать вне веб-приложения, как в шаблонах электронной почты, поэтому решением будет передать messageSource в файл vm и прочитать его из файла свойств, как ответ здесь:

Возможно ли динамическое чтение статического текста из файлов свойств в шаблоне скорости?

...