Настройка шаблона бесплатного маркера из classpath - PullRequest
34 голосов
/ 11 июня 2010

У меня есть веб-приложение, которое мне нужно вручную получить шаблон Freemarker - шаблон получается через класс в проекте библиотеки, но сам файл tpl содержится в пути к классам веб-приложения.Итак, есть 2 проекта, один «taac-backend-api» и другой «taac-web»;У taac-backend-api есть код для захвата шаблона и его обработки, но в taac-web хранится шаблон (в частности, в: WEB-INF / classes / email / vendor.tpl).источник ресурса classpath к использованию метода setClassForTemplateLoading Freemarkers.Я предполагаю, что это будет работать:

    freemarkerConfiguration = new Configuration();
    freemarkerConfiguration.setClassForTemplateLoading(this.getClass(), "");
    Template freemarkerTemplate = freemarkerConfiguration.getTemplate("/email/vendor.tpl");

пока я всегда получаю исключение FileNotFoundException.Может кто-нибудь объяснить лучший способ получить шаблон из classpath?

Спасибо.

Ответы [ 4 ]

76 голосов
/ 11 июня 2010

вот что у меня получилось:

freemarkerConfiguration = new Configuration();
freemarkerConfiguration.setClassForTemplateLoading(this.getClass(), "/");
Template freemarkerTemplate = freemarkerConfiguration.getTemplate("email/vendor.tpl");
4 голосов
/ 05 марта 2017

В 2017 году следующее не рекомендуется:

Configuration conf = new Configuration();

Мы должны передать конструктору freemarker.template.Version:

Configuration conf = new Configuration(new Version(2, 3, 23));
conf.setClassForTemplateLoading(Application.class, "/views");

, где номера версий относятся к текущей версии FreeMarker.

Каталог views находится в src/main/resources.

4 голосов
/ 16 октября 2013
freemarkerConfiguration = new Configuration();
freemarkerConfiguration.setClassForTemplateLoading(this.getClass(), "");
Template freemarkerTemplate = freemarkerConfiguration.getTemplate("template.tpl");

Используйте этот метод для загрузки классов из пакета, в котором расположен ваш класс, поэтому, если ваш класс

org.foo.SomeClass, шаблоны будут искать в /org/foo в classpath.Это сохраняет ваши шаблоны в классе, который их использует / загружает.

0 голосов
/ 27 мая 2011

Если вы используете Struts 2 и плагин Conventions, решение wuntee похоже не работает: setClassForTemplateLoading в свою очередь создает экземпляр ClassTemplateLoader, который не находит файлы в jar-файлах, независимо от того, какой префикс пути указан.

Вместо этого создайте экземпляр StrutsClassTemplateLoader.(Я делаю это в пользовательском подклассе FreemarkerManager в его методе getTemplateLoader.) Он не принимает параметров, поэтому, вероятно, он просто знает, как работают Struts и Conventions.

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