Einstellung freemarker-Vorlage aus classpath
Ich habe eine web-Anwendung, die ich brauche, manuell erhalten ein Freemarker template - die Vorlage ist, die über eine Klasse in einer Bibliothek-Projekt, aber die eigentliche tpl-Datei ist, die in der web-Anwendung classpath. Also, es gibt 2 Projekte, eins 'taac-backend-api' und anderen 'taac-web'; taac-backend-api hat den code schnappen Sie sich die Vorlage an, und verarbeiten es, aber taac-web ist, wo die Vorlage speichert (und zwar in: WEB-INF/classes/E-Mail/Anbieter.tpl) - ich habe alles versucht, von mit Federn classpath-Ressource zu verwenden Freemarkers setClassForTemplateLoading Methode. Ich nehme an, das würde funktionieren:
freemarkerConfiguration = new Configuration();
freemarkerConfiguration.setClassForTemplateLoading(this.getClass(), "");
Template freemarkerTemplate = freemarkerConfiguration.getTemplate("/email/vendor.tpl");
doch, bekomme ich immer eine FileNotFoundException. Kann jemand erklären, der beste Weg um eine Vorlage aus dem classpath?
Dank.
InformationsquelleAutor der Frage wuntee | 2010-06-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
dies ist, was schließlich für mich arbeiten:
InformationsquelleAutor der Antwort wuntee
Verwenden Sie diese Methode zum laden der Klassen aus dem Paket, wo sich Ihre Klasse befindet, also, wenn Sie Ihre Klasse ist
org.foo.SomeClass
werden die Vorlagen nach Begriffen in/org/foo
im classpath. Dies hält Ihre Vorlagen gespeichert, die die Klasse verwendet/geladen.InformationsquelleAutor der Antwort user738048
2017, das folgende ist veraltet:
Sollten wir passieren
freemarker.template.Version
an den Konstruktor:wobei die version, die zahlen beziehen sich auf die aktuelle version von FreeMarker.
Den
views
Verzeichnis befindet sich insrc/main/resources
.InformationsquelleAutor der Antwort Jan Bodnar
Wenn Sie mit Struts 2 und die Konventionen plugin, wuntee die Lösung scheint nicht zu funktionieren:
setClassForTemplateLoading
schafft wiederum eine Instanz vonClassTemplateLoader
die nicht die Dateien zu finden, in Gläsern, egal was Pfad-Präfix angegeben ist.Erstellen Sie stattdessen eine Instanz von
StrutsClassTemplateLoader
. (Ich mache das in einer benutzerdefinierten sub-Klasse vonFreemarkerManager
in seinergetTemplateLoader
Methode.) Es nimmt keine Parameter, also vermutlich ist es einfach nur weiß, wie man Struts und Konventionen Dinge tun.InformationsquelleAutor der Antwort Rodney Gitzel