Шаблон скорости не найден с помощью Classpath - PullRequest
1 голос
/ 09 декабря 2011

Мне не удается получить доступ к моим шаблонам скорости, когда я переключаюсь на загрузчик ресурсов "classpath".Я пытался поместить каталог шаблонов в / WEB-INF / classes / templates, / WEB-INF / templates, создавая templates.jar в / WEB-INF / lib.Никто из них не работает.Есть идеи?Права доступа к этим файлам правильные.

Properties p = new Properties();
p.setProperty("runtime.log.logsystem.class", "org.apache.velocity.tools.generic.log.CommonsLogLogSystem");

/*
// Works fine:
p.setProperty(RuntimeConstants.RESOURCE_LOADER, "file");
p.setProperty("file.resource.loader.path", "/path/to/templates");
*/

// Cannot find template with this:
p.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
p.setProperty("class.resource.loader.class", ClasspathResourceLoader.class.getName());
p.setProperty("resourceLoaderPath", "/WEB-INF/classes/templates");

org.apache.velocity.app.Velocity.init(p);

template = org.apache.velocity.app.Velocity.getTemplate("confirmation_html.vm");

Ответы [ 3 ]

7 голосов
/ 21 декабря 2011

Вот как я это делал в прошлом. Это сработало, хотя, возможно, не лучший способ заставить его работать. Предполагая, что у вас есть структура / webapps / WEB-INF / ,

 Properties prop = new Properties();
 String absolutePath=new File(Thread.currentThread().getContextClassLoader().getResource("").getFile()).getParentFile().getParentFile().getPath();//this goes to webapps directory
 prop.put("file.resource.loader.path", absolutePath+"/WEB-INF/classes/templates");
 Velocity.init(prop);
 Template t=Velocity.getTemplate("confirmation_html.vm");

P1nG

1 голос
/ 09 декабря 2011

IIRC, WEB-INF / clases является корнем пути к классу три, поэтому вы можете просто попробовать "templates /" или "/ templates"

0 голосов
/ 03 февраля 2012

Это больно.Если вы введете classpath, то разработка станет адом, поскольку контейнер сервлета будет перезагружать веб-приложение каждый раз, когда вы вносите изменения в шаблоны скорости.view.WebappResourceLoader, который значительно упрощает разработку, не требуя наличия файлов в пути к классам, а также позволяет выполнять относительные включения.

Вы также можете проверить мой пост об этом: Spring-mvc + Velocity + DCEVM

...