У меня есть приложение Java EE 6, в котором я хотел бы использовать скорость для генерации писем из шаблона.У меня есть бин @Named, который отвечает за загрузку и заполнение определенного шаблона.Проект представляет собой веб-приложение, поэтому я поместил свои шаблоны в классы WEB-INF / (что, между прочим, кажется довольно уродливым, но я пока не нашел более элегантного решения) и использовал 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 механизму скорости.Но мой бин не знает об этом контексте, и я не хочу использовать сервлет для отправки почты.Интерфейс реализован с помощью JSF 2.0, поэтому я могу получить доступ к FacesContext.getCurrentInstance (). GetExternalContext (). GetContext (), привести его к ServletContext и предоставить его движку.Однако контекст всегда нулевой, и я просто понятия не имею, как заставить все работать.Каждый совет / решение высоко ценится:)
Заранее спасибо, Алекс