出了点问题,这非常令人沮丧。我在Velocity的主页上读到,当我运行webapp时,应设置一些属性。我已经做到了,但是无论我做什么,我都会遇到相同的错误。 这是我设置道具并使用速度的地方
public class ConfirmationMailGenerator implements MailGenerator { private BasicUser user; private String htmlTemplate = "HTMLConfirmationMailTemplate.vsl"; private String plainTemplate = "PlainConfirmationMailTemplate.vsl"; public ConfirmationMailGenerator(BasicUser user) { this.user = user; } public StringWriter generateHTML() throws Exception { Properties props = new Properties(); props.setProperty("resource.loader", "wepapp"); props.setProperty("webapp.resource.loader.class", "org.apache.velocity.tools.view.WebappResourceLoader"); props.setProperty("webapp.resource.loader.path", "/WEB-INF/mailtemplates/"); VelocityEngine engine = new VelocityEngine(props); VelocityContext context = new VelocityContext(); engine.init(); Map map = createDataModel(); context.put("user", map); Template template = engine.getTemplate(htmlTemplate); StringWriter writer = new StringWriter(); template.merge(context, writer); return writer; } ... }
这些文件当然保存在/ WEB-INF / mailtemplates /中。 如果我用这个我得到这个错误:
SEVERE: ResourceManager : unable to find resource 'HTMLConfirmationMailTemplate.vsl' in any resource loader. SEVERE: The log message is null.
感谢您的时间:)
您正在使用Webapp资源加载器,该资源加载器适用于Velocity Tools servlet服务的页面。(它需要一些特殊的初始化才能找到servlet上下文的根)。
我建议您使用ClasspathResourceLoader,然后将文件放入WEB-INF / classs或classpath中的其他位置。这确实是最直接的方法。
resource.loader = class class.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
更多信息在这里:
https://velocity.apache.org/engine/1.7/apidocs/org/apache/velocity/runtime/resource/loader/ClasspathResourceLoader.html