Spring Freemarker рендер "включает" индивидуально - PullRequest
2 голосов
/ 27 июня 2011

У меня есть шаблон бесплатного маркера (index.ftl) с включенным в него включением (page1.ftl и page2.ftl):

this is the sample content on index.ftl
<#include "/pages/page1.ftl">
<#include "/pages/page2.ftl">

blablabla contents here

В моей весенней среде я расширил класс «AbstractTemplateView» ипереопределить метод "renderMergedTemplateModel", который вызывает doRender следующим образом:

protected void doRender(Map<String, Object> model, String viewName,     HttpServletResponse response)
        throws Exception {
    logger.debug("start doRender");
    try {
        Configuration config = new Configuration();
        String templatePath = templateService.getTemplateLocation();
        config.setDirectoryForTemplateLoading(new File(templatePath));
        Template template = config.getTemplate(viewName);
        response.setContentType("text/html; charset=" + template.getEncoding());
        PrintWriter out = response.getWriter();
        template.process(model, out);
    } catch (IOException e) {
        String message = format("cannot render template <{0}> due to IOException: {1}", e.getMessage());
        logger.error(message, e);
        throw new NestedServletException(message, e);
    }
}

У меня вопрос, как я могу отдельно установить каталог для включений для page1.ftl и page2.ftl?Является ли это возможным ?Метод setDirectoryForTemplateLoading устанавливает только каталог по умолчанию для шаблонов.Любые включения будут просматриваться относительно этого каталога.

Контекст этой проблемы в том, что я буду загружать include.Но если я не могу найти включения, он будет искать в другой каталог.

Пример FTL скажем (index.ftl):

 FREEMARKER MAIN

 <#include "page1.ftl">
 <#include "page2.ftl"> 

Я попробовал мультизагрузчик, и он, похоже, работает на index.ftl.он попытается определить каталоги, которые я определил.но как я могу разрешить, скажем, как разные пути к каталогам для page1.ftl и page2.ftl?Является ли это возможным?Это дает мне ошибки, когда одного из включенных нет.

1 Ответ

1 голос
/ 27 июня 2011

setDirectoryForTemplateLoading - это только удобный метод, который передает соответствующий FileTemplateLoader в Configuration#setTemplateLoader.Возможно, вы захотите объединить несколько FileTemplateLoader с в один MultiTemplateLoader и передать этот загрузчик шаблонов на Configuration#setTemplateLoader, например:

import freemarker.cache.*; // template loaders live in this package
...
FileTemplateLoader ftl1 = new FileTemplateLoader(new File("/tmp/templates"));
FileTemplateLoader ftl2 = new FileTemplateLoader(new File("/usr/data/templates"));
TemplateLoader[] loaders = new TemplateLoader[] { ftl1, ftl2};
MultiTemplateLoader mtl = new MultiTemplateLoader(loaders);
cfg.setTemplateLoader(mtl);

(взято из документации FreeMarker о загрузке шаблонов из несколькихместа )

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