VelocityEngine:找不到模板资源

时间:2017-07-24 21:20:25

标签: java classloader velocity

当我使用Wildfly服务器在eclipse中本地运行项目时,我能够访问模板。但是,当我在我的prod服务器上运行模板时,它无法找到模板。

我的虚拟机模板位于一个包中: com.email.templates

我已经检查了WEB-INF文件夹,我可以看到模板位于:

glm()

我使用以下属性初始化VelocityEngine:

myapp.war\WEB-INF\classes\com\email\templates\

尝试获取模板时,我尝试了以下两种方法:

通过 org.springframework.ui.velocity.VelocityEngineUtils

Properties prop = new Properties();
prop.put(RuntimeConstants.RESOURCE_LOADER, "class");
prop.put("class.resource.loader.class", ClasspathResourceLoader.class.getName());
this.velocityEngine.init(prop);

通过 org.apache.velocity.app.VelocityEngine

  Map<String, String> model = new HashMap<String, String>();
  model.put("payload", "some payload");
  String body = VelocityEngineUtils.mergeTemplateIntoString(this.velocityEngine , "/com/email/templates/my_template.vm", model);

1 个答案:

答案 0 :(得分:0)

您的模板不在类路径中您应该在资源文件夹而不是$emits中使用模板。这是工作我相信你需要web app

WebappResourceLoader

编辑:如果从Resources文件夹加载,请始终使用以下代码:

Properties props = new Properties();
props.setProperty("resource.loader", "webapp");
props.setProperty("myapp.resource.loader.class", "org.apache.velocity.tools.view.WebappResourceLoader");
props.setProperty("webapp.resource.loader.path", "classes\com\email\templates");
VelocityEngine engine = new VelocityEngine(props);