J'ai une application Java EE 6 dans laquelle j'aimerais utiliser la vélocité pour générer des mails à partir d'un modèle. J'ai un bean @Named qui est chargé de charger et de remplir un modèle particulier. Le projet est une application web, j'ai donc placé mes templates dans WEB-INF/classes (ce qui btw semble plutôt moche, mais je n'ai pas trouvé de solution plus élégante maintenant) et utilisé le ClasspathResourceLoader pour accéder aux fichiers. La configuration est la suivante:Comment charger un modèle de vélocité dans un EJB à utiliser comme modèle de courrier
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);
exécution de ce code produit l'exception follwing:
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)
Je suis obligé de remettre ServletContext au moteur de vitesse. Mais mon bean n'est pas conscient de ce contexte et je ne veux pas utiliser une servlet pour envoyer des mails. Le frontent est implémenté avec JSF 2.0 afin que je puisse accéder à FacesContext.getCurrentInstance(). GetExternalContext(). GetContext(), le transtyper en ServletContext et le fournir au moteur. Cependant, le contexte est toujours nul, et je n'ai aucune idée de comment tout faire fonctionner. Chaque indice/solution est très appréciée :)
Merci à l'avance, Alex
Merci Bozho, que résolu le problème de journalisation pour moi. Maintenant, je suis confronté au problème de ne pas trouver mon modèle (à nouveau). Comme mentionné ci-dessus j'ai utilisé le ClasspathResourceLoader, ayant mes modèles dans un pot comme décrit ici: http://velocity.apache.org/engine/releases/velocity-1.5/developer-guide.html#configuring_resource_loaders Donc, avez-vous une solution pour ce problème aussi bien? Je vous remercie! Alex – alexhanschke
Trouvé le problème, la propriété est appelée 'class.resource.loader.class' pas 'resource.loader.class' – alexhanschke