使用Classpath找不到速度模板

时间:2011-12-09 14:58:10

标签: java velocity

当我切换到“classpath”资源加载器时,我似乎无法访问我的速度模板。我已经尝试将模板目录放在/ WEB-INF / classes / templates,/ WEB-INF / templates上,在/ WEB-INF / lib中创建templates.jar。他们都没有工作。有任何想法吗?这些文件的权限都是正确的。

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 个答案:

答案 0 :(得分:7)

这就是我过去的表现。虽然可能不是使其正常工作的最佳方式,但它已经奏效了。假设您有 / 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 :(得分:1)

IIRC,WEB-INF / clases是类路径三的根,所以你可以尝试“templates /”或“/ templates”

答案 2 :(得分:0)

这很痛苦。如果您放入类路径,那么开发就变得很糟糕,因为每次在速度模板中进行更改时,servlet容器都会重新加载webapp。

我建议使用org.apache.velocity.tools.view.WebappResourceLoader,它不需要文件在类路径中,也允许你做相对包含,这使得开发变得更加容易。

您还可以查看我的帖子:Spring-mvc + Velocity + DCEVM