jinja2 alike Template Engine für Java?

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hallo,

kann mir jemand eine einfache Template Engine für Java empfehlen?

Auf dieser Seite sind ja ettliche aufgeführt:
http://java-source.net/open-source/template-engines

Bevor ich die mir alle en detail angucke, dachte ich ich frage mal schnell in die Runde. Ich brauche das nur für das Erzeugen von einer Textdatei (DOT File); Vererbung wäre also nicht notwendig. Ich brauche eigentlich nur Schleifen und evtl. Bedingungen.

Da es hier durchaus kundige Java-Nutzer gibt, die dazu einen Vergleich zu jinja im Kopf haben, ist das sicherlich nicht die dümmste Idee :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich habe mir jetzt mal FreeMarker genauer angeguckt und zunächst in meinen Code integriert. Hat imho eine ganz gute Dokumentation und läßt sich sehr einfach benutzen.

Die Template-Syntax ist zwar XML, aber bei kleineren Sachen schadet das der Lesbarkeit nicht wirklich.

Da mein Template nicht sehr anspruchsvoll ist, werde ich wohl dabei bleiben :-) Das ganze ist ja auch nur ein Mini-Tool für meine Dipl.-Arbeit.

(Es wäre alles so viel einfacher gewesen, wenn es einen brauchbaren OWL-Parser für Python geben würde...)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du kannst auch Jinja aus Java nutzen, mit Jython könnte das womöglich sogar klappen. Dann musst du auf die Speedups verzichten aber das reicht ja auch oft schon.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Leonidas hat geschrieben:Du kannst auch Jinja aus Java nutzen, mit Jython könnte das womöglich sogar klappen. Dann musst du auf die Speedups verzichten aber das reicht ja auch oft schon.
Interessante Idee! Probiere ich morgen mal aus - wenn ich denn die Zeit dazu finde ;-)
Mein Ansatz läuft jetzt ganz zufriedenstellend... da es nur ein workaround ist, reicht mir das für die Praxis. Aber für die Zukunft wäre es sicherlich gut zu wissen, ob man das realisieren kann.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Wenn es bei den Templates auf Geschwindigkeit ankommt, wird Jinja+Jython nicht so doll abschneiden, weil Jython nicht gerade ein Renner ist. Sollte denn die Java-Template-Engine syntaktisch kompatibel zu Jinja2 sein oder gibt es einfach einen bestimmten Aspekt, auf den es ankommt? Velocity wäre eine Alternative zu Freeemarker, die nicht auf XML aufsetzt.

Oder man bastelt sich etwas ähnliches selbst. Spring 3 enthält SpEL, die Spring Expression Language, die man schon mal benutzen könnte, um alle Ausdrücke innerhalb von Interpolationen und Tags auszuwerten. Damit bleibt die Aufgabe, einen Text in statische Bestandteile, Interpolationen in {{ }} und Tags in {% %} zu zerlegen und die Tags zu implementieren. Bei den Tags sollte man zwischen "Inline" und "Block" unterscheiden. Hier ein Beispiel: http://gist.github.com/470630 Man sollte noch den PropertyResolver ändern, damit Variablen nicht alle mit "#" beginnen müssen. Außerdem habe ich keine Fehlererkennung. Statt Filter mit "|" würde ich vorschlagen, einfach Funktionen zu registrieren, also z.B. "escape(foo)" statt "foo|escape".

Stefan
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich finde es sehr amüsant dass wir in Google an Platz 6 sind, wenn man nach "Java Template Engine" sucht :) Ich habe nämlich gerade ein Ähnliches Problem wie Hyperion. Nutze Clojure und überlege ob ich eine Template-Engine für die HTML-Ausgabe mache oder stattdessen was mit ``prxml`` oder ähnlichem zusammentacker...

Edit: Ok, mit Firefox, der Google-Cookies droppt kann ich es nicht mehr nachvollziehen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@Leonidas: Bei mir auf Platz 8. Das hängt mit Sicherheit damit zusammen, dass Google merkt, dass deine Suchanfragen vermutlich größtenteils etwas mit Python zu tun haben und dementsprechend pythonbezogenen Ergebnissen eine gewisse Relevanz zuschreibt.
BlackJack

Hm, bei mir ist es auf den ersten 3 Ergebnisseiten nicht dabei. Ihr verratet Google anscheinend viel zu viel über eure Vorlieben. :-)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hui... habe das ja lange nicht mehr angefasst, da meine Java-Lösung so weit funktionierte und ich mich auch andere Sachen konzentrieren musste. Ich finde die Lösung mit Jython und jinja ja nach wie vor reizvoll, zudem es bei mir nicht auf Geschwindigkeit ankommt.

Aber das google-Ranking muss ich auch mal antesten :-)

Edit: Bei mir auch Platz 8!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

BlackJack hat geschrieben:Hm, bei mir ist es auf den ersten 3 Ergebnisseiten nicht dabei. Ihr verratet Google anscheinend viel zu viel über eure Vorlieben. :-)
Man möge mich steinigen, aber ich finde es gut, dass Google in dieser Hinsicht mitdenkt. Dass da einer ständig nach Python- und Ubuntu-Themen sucht, darf Google von mir aus gerne wissen.
BlackJack

@snafu: Mag ja sein, aber in diesem Fall denkt Google nicht wirklich mit, denn der Treffer bringt ja nix ausser der Frage, die man selber gestellt hat.
Antworten