шаблоны freemarker в нескольких банках - PullRequest
8 голосов
/ 29 июля 2011

Как мне настроить freemarker для поиска шаблонов в нескольких банках? С пружиной.

<!-- freemarker config -->
<bean id="freemarkerConfig"
    class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPaths" value="classpath:/freemarker/" />
</bean>

Один файл war (для развертывания) и файл jar (в зависимостях).

One.war

/ FreeMarker / simple.ftl

Two.jar

/ FreeMarker / test.ftl

Работа.

ModelAndView mav = new ModelAndView();
mav.setViewName("simple");

Не работает. Не могу найти test.ftl

ModelAndView mav = new ModelAndView();
mav.setViewName("test");

Если настройки:

<property name="templateLoaderPaths" value="classpath:/freemarker/,classpath:/freemarker2/" />

One.war

/ FreeMarker / simple.ftl

Two.jar

/ freemarker2 / test.ftl

работа.

ModelAndView mav = new ModelAndView();
mav.setViewName("simple");

работа.

ModelAndView mav = new ModelAndView();
mav.setViewName("test");

И вопрос! Как настроить freemarker для поиска в нескольких банках (войнах) по одному пути (classpath: / freemarker /)?

Ответы [ 2 ]

10 голосов
/ 01 августа 2011

Я нашел решение!Отключите lovelyFileSystemAccess , чтобы всегда загружать через SpringTemplateLoader.

    <!-- freemarker config -->
<bean id="freemarkerConfig"
    class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPaths" value="classpath:/freemarker/" />
    <property name="preferFileSystemAccess" value="false" />
</bean>

public void setPreferFileSystemAccess (логическое предпочтениеFileSystemAccess)

Установить, предпочитать лидоступ к файловой системе для загрузки шаблона.Доступ к файловой системе позволяет оперативно обнаруживать изменения шаблона.

Если это включено, FreeMarkerConfigurationFactory попытается разрешить указанный «templateLoaderPath» как ресурс файловой системы (который будет работать для ресурсов расширенного пути к классам и ресурсов ServletContext).

По умолчанию установлено значение "true".Отключите это, чтобы всегда загружать через SpringTemplateLoader (то есть как поток, без горячего обнаружения изменений шаблона), что может быть необходимо, если некоторые из ваших шаблонов находятся в каталоге расширенных классов, в то время как другие находятся в jar-файлах.

1 голос
/ 29 июля 2011

Однажды я сделал подобное программно:

public class ControllerServlet extends HttpServlet {
  private Configuration cfg; 
  public void init() {
    cfg = new Configuration();
    // 1
    WebappTemplateLoader wtl = new WebappTemplateLoader(getServletContext(), "WEB-INF/templates");
    // 2
    ClassTemplateLoader ctl = new ClassTemplateLoader(ControllerServlet.class, "templates");
    MultiTemplateLoader mtl = new MultiTemplateLoader(new TemplateLoader[] {wtl, ctl});
    cfg.setTemplateLoader(mtl);
    //....
 }
}

ControllerServlet - базовый класс для моих реальных сервлетов.

Номер 1 устанавливает путь поиска для шаблонов {{WEB-INF / templates}} в текущем контексте сервлета. Номер 2 устанавливает второй путь поиска для подпакета «Шаблоны».

Вы можете добавить дополнительные пути к шаблонам.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...