Velocity condensed

Velocity ist keine Fahrradstadt, sondern ein Java-basiertes Templatesystem, dass eine Trennung zwischen Java-Code und Oberflächenbeschreibung erlaubt. Die Velocity Template Language (VTL) erlaubt den Aufruf von an anderer Stelle in Java implementierten Objekten und Methoden. Velocity geht über den reinen Einsatz auf Webpages hinaus. Auch SQL (u.v.m.) läßt sich damit zusammenbauen.

Nach vergleichsweise langer Suche habe ich eine gute How-to-Seite gefunden, aus der ich im Folgenden das Wesentliche wiedergebe.

Sprachsyntax:

– jede Anweisung beginnt mit #, Referenzen mit $

-Variablen werden mit $ gekennzeichnet, sie können im HTML-Code oder im Java-Code definiert und initialisiert werden: #set ( $a = “bla”), Variablen beginnen mit Buchstaben, so dass die Angabe $2.40 nicht als Variable interpretiert wird.

– Escaping mit \

-Strings: ” “, wenn sowohl statischer Text, als auch zu interpretierende Variablen, ‘ ‘ wenn as-is.

– Comment: ## (single line), #* *# (multiline), #** *# (documentation)

-drei Typen von Referenzen: variables ($var), properties($object.Property ruft, wenn vorhanden die Methode getProperty() auf – nicht verwechseln mit Instanzvariable! Auf diese kann nicht ohne Getter zugegriffen werden), methods ($object.eatThis( “banana”) ), wobei die Übergabe zwischen Java und Velocity immer über Strings läuft

– werden Properties verwendet, gibt bestimmte Lookup-Rules um auf die richtige Methode zu kommen

– ist eine Referenz zum Zeitpunkt der Ausführung nicht definiert, wird die Referenz als Klartext ausgegeben. Um stattdessen blank auszugeben, ist ein ! zu notieren: $!justDontPrintMeIfNull

– die zu den Referenzen angegebene Schreibweise ist die shorthand-Schreibweise. Wenn nötig, kann der Ausdruck mit geschweiften Klammern versehen werden: $!{object.doFormal()}

– Escapen mit \

-Anweisungen: beginnen immer mit #, lassen sich auch über {} schreiben: #{if}

-#set: zum Wertzuweisen: #set ( $var = XXX) mit XXX als Property, Methodenrückgabe, Variable, Array ( [ “b”, “c”]), Map ({“a” : “appel”, “b” : “banane”}), arithmetischer Ausdruck

– Standardmäßig kann KEIN null zugewiesen werden! Die Referenz bleibt erhalten!

-Konditionen: #if #ifelse #else #end(!)

-Evaluierung im #if: $var ist true, wenn boolean und true ODER $var ist nicht boolean und nicht null

– == kann zum Vergleich von Strings, Numbers oder Objects verwendet werden

– logische Operatoren &&, || und ! äquivalent zu Java

-#foreach( $thingie in $things) #end

– interne Variable für die Nummer des Schleifendurchlaufs: $velocityCount startet bei 1

– #include (“bla.txt”) : ungerendertes Einbauen, #parse (“vtlText.txt”) : rendern und einbauen; Dateien müssen unter TEMPLATE_ROOT liegen

-#stop. Stoppt die Velocity-Interpretation, zu Debugging-Zwecken sinnvoll.

Soviel zu Velocity condensed. Es gibt auch die Möglichkeit Macros zu schreiben (Velocimacros). Darauf möchte ich an dieser Stelle nicht weiter eingehen. In oben verlinktem How-to wird darauf näher eingegangen.

Best practices: SQL-Repositories

Nachdem ich mich nun schon zum x-ten Mal durch Logfiles wühle, mal eine kleine Anregung: Werden die SQL-Statements einer Anwendung zentral in einer Datei gehalten (SQL-Repository/Statement-Repository), lohnt es sich, zu jedem Statement einen SQL-Kommentar aufzunehmen: Was macht das Statement und aus welchem Kontext wird es aufgerufen? Diese Kommentare werden typischerweise im Log gezeigt und vereinfachen die Analyse enorm. Gleichzeitig sinkt die Fehlerwahrscheinlichkeit bei Korrekturen durch allgemeines Verständnis. Was für das Anwendungsprogramm gilt, muss auch für Statements gelten: DOKU OR DIE!

Bei Statements empfiehlt sich die Kommentierung mit “/*” und “*/”, da der gebräuchlichere Einzellenkommentar mit “- -” ein blockweises Auskommentieren in XML-Dateien verhindert.