Post on 06-Apr-2015
transcript
PR SE Workshop "Velocity"1
-Velocity Template Engine
Doppelhammer Eva, 0159008
Oberndorfer Norbert, 0155621
PR SE Workshop "Velocity"2
Inhalt
• Was ist Velocity?
• Anwendungsbereich
• Vorteile / Nachteile
• Bsp: Standalone & Eingebettet (in Turbine)
• Velocity in Turbine
• Funktionsweise
• Syntax
• Beispiel
PR SE Workshop "Velocity"3
Was ist Velocity?...ist eine auf Java basierende Template Engine
...definiert eine einfache Sprache zur Textgenerierung
…generiert beliebige Text-Dokumente (HTML, XML, usw.)
...ermöglicht den Zugriff auf Java-Objekte
PR SE Workshop "Velocity"4
Anwendungsbereich
• Standalone– Code-Generierung (z.b Java-Files, C#, C++, …)– Xml-Generierung– Beliebige Textformate
• Eingebettet (meist in Web-Frameworks)– Web-UI-Generierung (z.b. html, xml)
– Z.b. in Turbine
PR SE Workshop "Velocity"5
Vorteile / Nachteile+ durch MVC: Trennung von Javacode und Internetseite
(iG zu JSP / PHP)>+ erhöhte Lesbarkeit+ einfache Syntax, leicht erlernbar+ stand-alone oder eingebettet (zB: Turbine) verwendbar+ vielseitig einsetzbar (nicht nur UI-Generierung)
- Open-Source: Weiterentwicklung? Dokumentation?- Nur für Java Anwendungen???
PR SE Workshop "Velocity"6
Beispiel: StandaloneFileWriter fw = new FileWriter(“persons.csv”);List persons = dbconnection.select(“* from Person”);Velocity.init(); VelocityContext context = new VelocityContext();context.put(“persons", persons);Template template = Velocity.getTemplate(“personCSV.vm"); template.merge(context, fw);
personCSV.vm Persons.csv
#foreach($p in $persons)$p.FirstName ;$p.LastName#end
Sepp ;ForcherHans ;HuberFranz ;MaierMax ;MustermannHelga ;HoferSonja ;Bauer
PR SE Workshop "Velocity"7
Eingebettet in Turbine• Die Initialisierung, Merge des Templates, Erzeugung des Context passiert
automatisch durch das Turbine Framework (iG bei Standalone Einsatz (siehe Bsp.).
• Mit Hilfe der Velocity-Templates wird Html erzeugt.
• Eigene Screen/Action/Navigation-Klassen leiten von Turbine Klassen ab.
• (Meistens) muss die Methode doBuildTemplate(data, context) überschrieben werden. Darin erweitert man den Kontext um diejenigen Daten, die im Screen/ in der Navigation dargestellt werden sollen.
• Das zugehörige Template wird nach Methodenaufruf automatisch gefunden und ausgeführt.
templates/screens/Index.vm
doBuildTemplate(Rundata d, Context ctx) { List rdfList = RdfPeer.doSelect(…); ctx.put(“entries“, rdfList)}
newapp.modules.screens.Index
#foreach ($entry in $entries) <tr> #entryCell ($entry.Title) #entryCell ($entry.Dept) </tr>#end
PR SE Workshop "Velocity"8
Velocity in Turbine
• Model View Controller – Torque OM Klassen> Modell
– Turbine Screens und Actions> Controller
– Velocity Templates> View
• Context ist Schnittstelle zwischen Controller und View– Action/Screen/Navigation füllt Context
– Velocity Templates greifen auf den Context zu
PR SE Workshop "Velocity"9
MVC schematisch
Context
PR SE Workshop "Velocity"10
Funktionsweise
• Konzept des „Context“ ist zentral in Velocity
– ...fungiert als Daten-Container zwischen Systemteile
– Systemteile sind Java-Layer (Programmierer) und Template-Layer (Designer)
– Programmierer sammelt Objekte und stellt sie in den Context; zB.: context.put(„persons“, getListOfPersons();
– Designer kann nun auf diese Objekte (inkl deren Methoden und Attribute) über die Templates zugreifen
– Zusammenarbeit zwischen Designer und Programmierer (Schnittstellendefinition)!!!!!
PR SE Workshop "Velocity"11
Syntax
• Variablen deklarieren• Kommentare• Methoden / Eigenschaften
• Bedingungen / Schleifen
• Makros
• Velocity benützen
PR SE Workshop "Velocity"12
Variablen• Wertzuweisung
– durch #set-Befehl im Template• #set ($hallo = “Griasti“)
– vom Java-Code• Context
• Wenn Javavariable $hallo Wert “hi“ zum Zeitpunkt der Anfrage auf das Template => Output immer “hi“
PR SE Workshop "Velocity"13
VariablennamenRichtig
• $hallo
• $Hallo1
• $baum-haus
• $baum_haus
• $c_-504
Falsch
• $Österreich
• $*Bereich
• $50jahre
• $_erledigt
=> muss mit Buchstaben anfangen
PR SE Workshop "Velocity"14
Kommentare
• kurzer Kommentar
– ## einzeiliger Kommentar
• Kommentarblock
– #*Kommentar über mehrere Zeilen *#
PR SE Workshop "Velocity"15
Eigenschaften / Methoden• Methode aufrufen
– $lva.raum(), $mitarbeiter.getName(), $lva.setbesuchen([“PR Software“, “SE IE“, “PROST IE“])
• Eigenschaft aufrufen / Kurzform Aufruf einer Methode
– $lva.leiter
• Spezielle Fälle
– Ich bin ${zahl}zehn.
– <input type = “text“ name = “Vorname“ value = “$!vorname“/>
– \$name
PR SE Workshop "Velocity"16
Aufruf im Template
• Methode $lva.getLeiter() aufrufen vom Template aus mit $lva.Leiter.
• Velocity sucht nach:
– 1: $lva.getleiter
– 2: $lva.getLeiter
PR SE Workshop "Velocity"17
Bedingungen / Schleifen
IF-Bedingung#if(Bedingung1)
Aktion1
#elseif(Bedingung2)Aktion 2
#else Aktion 3
#end
• Logische OperatorenNOT> !, AND> &&OR> ||
For Each – Schleife#foreach (Bedingung)
Aktion
#end• Schleifenzähler:
$velocityCount
PR SE Workshop "Velocity"18
Einfügen von Dateien#include (“statisch.html“)
• Datei nicht bearbeitet
– direkt eingefügt
– liegen in TEMPLATE_ROOT
– möglich Datei über Variable einfügen
• #parse (“personTable.vm“)
• Datei wird bearbeitet
– enthält VTL (velocity template language)
– nur 1 Datei übergeben
– Templates in TEMPLATE_ROOT
– kann wiederum #parse-Befehle enthalten – 10 Ebenen
PR SE Workshop "Velocity"19
Makros: Velocimacros• Auslagerung von Scriptelementen
• Zeitersparnis– einmalig definiert
– Wiederholungen erspart
• Sktruktur– #makro (testmakro)
#end
• Aufruf im Template– #testmakro ()
PR SE Workshop "Velocity"20
Makros: Velocimacros• Erkennung
– Referenzen, Zeichenketten, Ziffern, IntegerRange, Objektarrys, Boolean
• Übergibt man einem Makro als Parameter eine Methode, so wird diese bei jedem Zugriff ausgeführt
#table5($counter.increase())
#macro table5($value)
PR SE Workshop "Velocity"21
Eclipse: Velocity Plugin
• unter: http://veloedit.sourceforge.net
• Editor für .vm Dateien– Syntax Highlighting– Source Insight (auch bei eigenen Makros)– Strukturansicht
• Einstellungen– Windows – Preferences – VelocityUI
PR SE Workshop "Velocity"22
Beispiel: Newapp
Velocity User Guidehttp://jakarta.apache.org/velocity/user-guide.html
PR SE Workshop "Velocity"23
Velocity Einstellungen in Turbine
TurbineResources.properties#------------------------------------------------------------------
#
# M O D U L E P A C K A G E S
#------------------------------------------------------------------
# This is the "classpath" for Turbine. In order to locate your own
# modules, you should add them to this path. For example, if you have
# com.company.actions, com.company.screens, com.company.navigations,
# then this setting would be "com.company,org.apache.turbine.modules".
#
# Default: org.apache.turbine.modules
#------------------------------------------------------------------
module.packages=org.mycompany.newapp.modules,org.apache.turbine.flux.modules
#------------------------------------------------------------------
#
# V E L O C I T Y S E R V I C E
#------------------------------------------------------------------
services.VelocityService.file.resource.loader.path = /templates/app,/templates/flux
services.VelocityService.velocimacro.library = GlobalMacros.vm