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
jinja2 alike Template Engine für Java?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- 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...)
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
assert encoding_kapiert
-
- 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
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Interessante Idee! Probiere ich morgen mal aus - wenn ich denn die Zeit dazu findeLeonidas 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.
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
assert encoding_kapiert
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
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
-
- 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.
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
@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.
Hm, bei mir ist es auf den ersten 3 Ergebnisseiten nicht dabei. Ihr verratet Google anscheinend viel zu viel über eure Vorlieben.
- 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!
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
assert encoding_kapiert
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 hat geschrieben:Hm, bei mir ist es auf den ersten 3 Ergebnisseiten nicht dabei. Ihr verratet Google anscheinend viel zu viel über eure Vorlieben.
@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.