Eine Open-Source-Java-Template-Engine mit Vererbung

Ich entwickle ein Java-Servlet-basiertes Projekt und bin ein Neuling auf dieser Plattform. Normalerweise verwende ich Django, das eine tolle Standard-Template-Engine hat. Gibt es etwas ähnliches für Java?

PS: Vorlagenvererbung ist ein Muss (um Wiederholungen zu vermeiden). Es gibt mehrere Bibliotheken wie Moustache, die diese Funktion nicht bieten.

Was meinst du mit "Vorlagenvererbung"?
Angenommen, Sie haben einen Teil Ihres HTML-Codes, der sich häufig wiederholt, zum Beispiel eine Navigationsleiste, die mit einer Fußzeile/Seitenleiste usw. gekoppelt ist. Jetzt fügen Sie Ihren sich wiederholenden Teil in eine Datei ein, sagen wir, und an der Stelle, an der der Inhalt nicht für alle gleich base.htmlist Dateien, sagst du {{block body}}. Sagen Sie dann in einer anderen Datei , login.htmlwenn Sie Vorlagenvererbung verwenden, müssen Sie nur {extends base.html}und dann sagen {{start bodyblock}} Your new content {{end bodyblock}}. Dadurch werden sowohl der statische als auch der dynamische Inhalt gerendert. Sie können jede Datei aus einer anderen Datei aufrufen.
Wie unterscheidet sich dies in der Praxis von der Möglichkeit, Seitenfragmente frei zu importieren, wie Sie dies in Freemarker-Vorlagen oder dem Play-Framework tun können?
Ich weiß nicht viel über die oben genannten Ressourcen. Erlauben sie eine hierarchieartige Struktur?
Ich sehe keinen Sinn in einer Hierarchie, wenn man beliebige Konstrukte einbeziehen kann. Erben ist nicht immer der beste Weg. Ich schlage vor, dass Sie die Komposition in Betracht ziehen, die die Ihnen zur Verfügung stehenden Templat-Ressourcen erweitert.

Antworten (3)

Rythm Template Engine sollte genau das sein, was Sie wollen. Ich bin mir nicht sicher, warum Sie sagten, dass der Doc nicht auf dem neuesten Stand ist.

Sehen Sie sich http://rythmengine.org/doc/template_guide.md#inheritance an und spielen Sie mit der Vererbungsfunktion unter http://fiddle.rythmengine.org/#/editor/886606b3a7034088b991855bef8f89da

Haftungsausschluss : Ich bin der Autor von Rythm

Damals landete ich tatsächlich bei Rythm, weil ich keine andere Templating-Engine finden konnte, die so einfach zu bedienen und vielseitig ist wie diese. Hut ab für die Entwicklung! Was die Dokumentation angeht, gab es ein Problem mit my-ISP-your-server, das es mir nicht erlaubte, die gesamte Seite anzuzeigen. Entschuldigung, dass ich die Frage nicht früher bearbeitet habe
Freut mich das zu wissen :-)

Zuerst möchten Sie vielleicht diesen SO-Artikel lesen , in dem es um die vorhandenen Templating-Engines geht und warum Sie welche von ihnen verwenden sollten. Das sollte Ihnen den Einstieg erleichtern.

Ich persönlich habe das Tiles Framework verwendet und war sehr zufrieden damit. Sie schreiben Ihre Snippets und haben eine Vorlage, um die Teile (Header, Footer, Navi, was auch immer) immer gleich zu kombinieren.

Die verschiedenen Kacheln sind normale JSP-Dateien und daher ist die Integration einfach, wenn Sie an JSP gewöhnt sind (was Sie sein werden, wenn Sie in Kürze mit Java, Servlets und JSP arbeiten).

Ich sollte bemerken, dass meine Erfahrung damit etwas verstaubt ist :) Ich habe seit Jahren nicht mehr für das Web programmiert.

Chunk Templates bietet Unterstützung für diese Art von Dingen wie {% exec %}folgt:

base_template.chtml

<html>
  <head>
  </head>
  <body>
    {$body}
  </body>
</html>

widget_detail.chtml

{% exec base_template %}
  {$body=}
    ...
  {=}
{% endexec %}

Hier ist ein interessanteres Beispiel, bei dem die Basisvorlage einige Standardwerte bereitstellt, die Sie vom Servlet oder in einer Exec überschreiben können:

base_template2.chtml

<html>
  <head>
    <title>{$page_title:Widget Emporium}</title>
  </head>
  <body>
    {$top_nav:.include top_nav}
    {$left_nav:.include left_nav}
    {$body}
    {$footer:.include footer}
  </body>
</html>

top_nav.chtml

<div class="top_nav">
  ...
</div>

left_nav.chtml

<div class="left_nav">
  ...
<div>

footer.chhtml

<div class="footer">
  ...
<div>

special_page.chtml - Unterdrücke die gesamte Navigation und verwende alternative Fußzeilen

{% exec base_template2 %}
  {$body=}
    ...
  {=}
  {$page_title = Special Page}
  {$top_nav=}{=}
  {$left_nav=}{=}
  {$footer=}{% include special_footer %}{=}
{% endexec %}

exec unterstützt auch json und xml für die Tag-Wertzuweisung .

Für einfachere Dinge ist die Chunk-Syntax der von Django/jinja2 ziemlich ähnlich. Filter werden auf die gleiche Weise mit Pipes angewendet: {$tag|filter}und Chunk-Tags werden als {$tag}oder {% $tag %}eher als geschrieben {{ tag }}, aber Sie gewöhnen sich ziemlich schnell daran.

Insbesondere die If-else-Verzweigung sollte jedem, der von Django kommt, sehr vertraut vorkommen:

{% if (...) %}
  true-case
{% else %}
  false-case
{% endif %}

Haftungsausschluss: Ich bin der Autor/Betreuer von Chunk. Das Projekt ist Open Source und auf GitHub verfügbar.