gpt4 book ai didi

java - 如何将速度模板加载到 EJB 中以用作邮件模板

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:39:47 26 4
gpt4 key购买 nike

我有一个 Java EE 6 应用程序,我想在其中使用速度从模板生成邮件。我有一个 @Named bean 负责加载和填充特定模板。该项目是一个 Web 应用程序,所以我将我的模板放入 WEB-INF/classes(顺便说一句,这看起来相当丑陋,但我现在还没有找到更优雅的解决方案)并使用 ClasspathResourceLoader 访问文件。配置如下:

Properties props = new Properties();
props.setProperty("resource.loader", "class");
props.setProperty("resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");

VelocityEngine engine = new VelocityEngine(props);
VelocityContext context = new VelocityContext();

engine.init();

context.put("myObject", myObject);
Template template = engine.getTemplate("mail_template.vm");

StringWriter writer = new StringWriter();
template.merge(context, writer);

运行此代码会产生以下异常:

Caused by: java.lang.UnsupportedOperationException: Could not retrieve ServletContext from application attributes
at org.apache.velocity.runtime.log.ServletLogChute.init(ServletLogChute.java:73)
at org.apache.velocity.runtime.log.LogManager.createLogChute(LogManager.java:157)

所以我需要将 ServletContext 交给速度引擎。但我的 bean 不知道该上下文,我不想使用 servlet 发送邮件。前端是使用 JSF 2.0 实现的,因此我可以访问 FacesContext.getCurrentInstance().getExternalContext().getContext(),将其转换为 ServletContext 并将其提供给引擎。然而上下文总是空的,我只是不知道如何让一切正常工作。非常感谢每个提示/解决方案:)

提前致谢,亚历克斯

最佳答案

Velocity 可以在任何环境中运行,因此 servlet 不是必需的。看来问题与日志记录工具有关,其默认值取决于 servlet。

您可以使用 NullLogChute,或者根据您的日志记录框架,选择一个实现 LogChute 的类。因此,例如,如果您使用 commons-logging,则需要 CommonsLogLogChute .如何设置:

To use, first set up commons-logging, then tell Velocity to use this class for logging by adding the following to your velocity.properties: runtime.log.logsystem.class = org.apache.velocity.runtime.log.CommonsLogLogChute

You may also set this property to specify what log/name Velocity's messages should be logged to (example below is default). runtime.log.logsystem.commons.logging.name = org.apache.velocity

因此,除了在 velocity.properties 中提供此设置外,您还可以调用:

engine.setProperty("runtime.log.logsystem.class", 
"org.apache.velocity.runtime.log.CommonsLogLogChute");

关于java - 如何将速度模板加载到 EJB 中以用作邮件模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4175302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com