440 likes | 631 Views
Velocity Workshop. Templatesprache im Turbine-Kontext. Was ist Velocity?. Java-basierte Template-Engine Verwendung für Code-Generierung Email-Templating Web-UI-Erzeugung Im Zusammenspiel mit Turbine: Fokus auf Web-UI-Erzeugung. Wie funktioniert Templating?. Velocity.
E N D
Velocity Workshop Templatesprache imTurbine-Kontext SE Projekt
Was ist Velocity? • Java-basierte Template-Engine • Verwendung für • Code-Generierung • Email-Templating • Web-UI-Erzeugung Im Zusammenspiel mit Turbine: Fokus auf Web-UI-Erzeugung SE Projekt
Wie funktioniert Templating? Velocity SE Projekt
Modell-View-Controller Velocity SE Projekt
Vorteile des Templating • Trennung von Content / Layout dadurch • Trennung von Programmierer / Designer • Referenzierung von Methoden, die in Java geschrieben sind (Velocity) SE Projekt
Velocity und Turbine • Velocity verwendet Referenzen aus dem Turbine-Context • Velocity repräsentiert den View-Teil • Turbine repräsentiert den Modell & Controller-Teil SE Projekt
Seitenaufbau Führt evt. notwendigeActions aus. Physikalische Strukturder zu erzeugenden Web-Site Stellt den eigentlichen Körper der Web-Site dar. Verantwortlich für Benutzerinteraktion und Datenanzeige. SE Projekt
Aufrufreihenfolge • Aufruf mit • http://..../HelloWorld.vm SE Projekt
Sprachkonzepte SE Projekt
Velocity Template Language (VTL) • Kommentare • Variablen/Methoden • Wichtige Befehle SE Projekt
Kommentare • Kommentarzeile ## Das ist ein Kommentar! • Kommentarblock #* Das ist ein Kommentarblock! *# SE Projekt
Variablen • Notation: $ [ ! ][ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ][ } ] • Beispiele: • $count-x • $!count-x • ${count-x} • \$count-x SE Projekt
Methoden • Aufruf einer Methode $kunde.getKundennr() • Kurze Schreibweise bei get/set Methoden $kunde.Kundennr SE Projekt
Wichtige Befehle #set #if #foreach #stop #include #parse #macro SE Projekt
#set (1) • Notation: #set( $ref = [",‘]arg[",‘] ) • Beispiele: #set( $name = "Markus„ ) #set( $test.Feld = ["E1","E2"] ) #set( $test.Feld2 = [1..10]) #set( $test.Map = {"schlüssel1":"wert1","s2":"w2"} )(ab Velocity v1.4) SE Projekt
#set (2) • Ist der rechte Ausdruck einer #set Anweisung leer, wird NICHT null zugewiesen!! • Text zwischen einfachen Anführungszeichen wird NICHT geparsed! Kann in der Datei velocity.properties umgestellt werden. SE Projekt
#if #if ( $Name == "Franz" || $Name == "Huber" ) Huber Franz #elseif unbekannt #end • Logische Operatoren NOT -> ! AND -> && OR -> || SE Projekt
#foreach #foreach( $product in $allProducts ) <li>$product</li> #end • Verfügbarer Schleifenzähler $velocityCount • Beginnt standardmäßig bei 1, dies kann jedoch in der Datei velocity.properties auf 0 geändert werden. SE Projekt
#stop • Beendet die Übersetzung eines Velocity Templates • Dies kann beim Debuggen sinnvoll sein. SE Projekt
#include • Notation: #include( arg[, arg2, … argn] ) • Beispiel: #include ( "lieferantenliste.txt", $kundenliste ) • Die eingefügten Dateien werden NICHT übersetzt. SE Projekt
#parse • Notation: #parse( arg ) • Beispiel: #parse ( "kundenausgabe.vm") • Die eingefügten Dateien werden übersetzt. • Es kann nur eine Datei auf einmal eingefügt werden! SE Projekt
#macro (1) • Notation: #macro( vmname $arg1 [ $arg2 $arg3 ... $argn ] ) [ VM VTL code... ] #end • Beispiel #macro ( listenausgabe $liste ) #foreach $elem in $liste <tr><td>$elem</td></tr> #end #end SE Projekt
#macro (2) • Anwendung #set ( $liste = [‘‘Zeile 1",‘‘Zeile 2"] ) <table> #listenausgabe ( $liste ) </table> • Übergibt man einem Makro als Parameter eine Methode, so wird diese bei jedem Zugriff ausgeführt. SE Projekt
Velocity im Turbine Context SE Projekt
Velocity und Turbine Context • Verknüpfung zwischen Javacode und Template • Verwaltung in einer Hashtable • Objekte: • RunData • TemplateLink • TemplatePageAttributes • Manuelles Hinzufügen von Objekten möglich SE Projekt
Verwendung RunData (1) • Referenzierung im Velocity mit $data • Alle public Methoden des Objekts verfügbar • Sehr große Anzahl an Methoden Gesamtliste unter Turbine Javadocs • Nachfolgend einige wichtige aufgezählt SE Projekt
Verwendung RunData (2) • getMessage() • addMessage(String msg) • getTitle() • getUser() • getServerName() • setRedirectUri(String ruri) • getTemplateInfo() SE Projekt
Verwendung TemplateLink (1) • Referenzierung im Velocity mit $link • Klasse TemplateLink eine Erweiterung der Klasse DynamicURI • Verwendung: Erzeugung von URIs • Bspw. Zu einem anderen Template:$link.setPage(„newpage.vm“) SE Projekt
Verwendung TemplateLink (2) • setPage(String templatename) • addPathInfo(String name, String value) • addQueryData(String name, String value) • getScriptName() • getServerData() • setAction(String action) • setScreen(String screen) • setSecure() SE Projekt
Verwendung TemplatePageAttributes (1) • Referenzierung im Velocity mit $page • Damit können bestimmte HTML – Eigenschaften gesetzt werden • Hintergrundfarbe • Titel • Textfarbe • Usw. SE Projekt
Verwendung TemplatePageAttributes (2) • addAttribute(String name, String value) • getTitle() • setBackground(String url) • setBgColor(String color) • setTextColor(String color) • setKeywords(String description) • setLinkColor(String color) SE Projekt
Eigene Objekte im Turbine Context (1) • Context wird mit Hashtable verwaltet • Objekte beliebigen Typs können hinzugefügt werden • Danach alle public Methoden des Objekts im Template (Velocity) verfügbar • Hinzufügen von Objekten mit dem Wert NULL NullPointerException SE Projekt
Eigene Objekte im Turbine Context (2) • Beispiel String-Objekt • Im Javacode: • context.put(„hello“,new String(„testing“)) • Im Template: • $hello the hello reference • Ergibt als Output: • testing the hello reference SE Projekt
Actions SE Projekt
Actions Aufruf mit HelloWorld.vm/action/UpdateWorldHelloWorld.vm/action/UpdateWorld_MethodName • Ruft das Template HelloWorld.vm auf • Vorher wird die VelocityAction UpdateWorld ausgeführt SE Projekt
Velocity Einstellungen SE Projekt
Konfiguration • richtige Ordnerstruktur • Einstellungen in der TurbineRessources.properties SE Projekt
Turbine Ordnerstruktur SE Projekt
templates Ordner • Enthält alle Velocity Templates (.vm) • app - GlobalMacros.vm • layouts - übergeordnete Layout • navigation – Navigationselemente • screens – eigentlichen Inhalte SE Projekt
src Ordner • spiegelt Struktur im class Ordner wieder • modules – zu *.vm zugehöriger Java Code • screens – eigentliche Inhaltssteuerung • actions – spezielle Aktionen SE Projekt
Einstellungen • unter WEB-INF\conf\ • in der (Text-)Datei TurbineRessources.properties SE Projekt
Einstellungen 1/2 F R A M E W O R K S E T T I N G S • template.homepage=Index.vm • template.login=Login.vm • template.error=Error.vm T E M P L A T E S E R V I C E • services.TemplateService.layout.cache.size=2 • services.TemplateService.navigation.cache.size=10 • services.TemplateService.screen.cache.size=50 SE Projekt
Einstellungen 2/2 V E L O C I T Y S E R V I C E • services.VelocityService.default.layout.template = Default.vm • services.VelocityService.velocimacro.library = GlobalMacros.vm • services.VelocityService.file.resource.loader.path = /templates/app C A C H I N G • services.VelocityService.file.resource.loader.cache = false • services.VelocityService.file.resource.loader.modification CheckInterval = 2 • services.VelocityService.velocimacro.library.autoreload = true SE Projekt
Eclipse: Velocity Plugin • unter: http://veloedit.sourceforge.net • Unterstützt beim Bearbeiten von .vm Dateien • Syntax Highlighting • Source Insight (auch bei eigenen Makros) • Strukturansicht • ... SE Projekt