这是一个真正的痛苦。我正在尝试将 Spring 配置为对我们要发送的电子邮件使用 Velocity 模板。在我的情况下,以下是不可接受的。
- 将模板罐起来并将其添加到类路径中
- 将模板放入 WEB-INF/classes 或 WEB-INF/lib
我正在使用 Spring 3.1.3 和 Tomcat 6.x。
问题是许多人都遇到过“org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'emailBody.vm'”问题。
假设模板文件位于 WEB-INF/templates 文件夹中,有人能否列出要在 .xml 和 .java 文件中使用的正确值。对于像我这样的 Spring 新手开发者来说,这将是一个很大的帮助。这上面有 100 个 qns,但它们指的是 spring 和 velocity 的多个版本。
我尝试的一种方法是在 dispatcher.xml 中添加一个 bean,如下所示,并在 java 文件中引用它。
< bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean" >
< property name="velocityProperties">
< props>
< prop key="resource.loader">webapp</prop>
< prop key="webapp.resource.loader.class">org.apache.velocity.tools.view.WebappResourceLoader</prop>
< prop key="webapp.resource.loader.path">/WEB-INF/templates/</prop>
< /props>
< /property>
< /bean>
Java代码如下
String body = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "emailBody.vm", map);
我也尝试以编程方式进行,
velocityEngine.addProperty("resource.loader", "url");
velocityEngine.setProperty("url.resource.loader.class", "org.apache.velocity.runtime.resource.loader.URLResourceLoader");
velocityEngine.setProperty("url.resource.loader.root", "/WEB-INF/templates/");