240 likes | 419 Views
- Velocity Template Engine. Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621. Inhalt. Was ist Velocity? Anwendungsbereich Vorteile / Nachteile Bsp: Standalone & Eingebettet (in Turbine) Velocity in Turbine Funktionsweise Syntax Beispiel. Was ist Velocity?.
E N D
- Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621
Inhalt • Was ist Velocity? • Anwendungsbereich • Vorteile / Nachteile • Bsp: Standalone & Eingebettet (in Turbine) • Velocity in Turbine • Funktionsweise • Syntax • Beispiel
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
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
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???
FileWriter 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); Beispiel: Standalone personCSV.vm Persons.csv #foreach($p in $persons) $p.FirstName ;$p.LastName #end Sepp ;Forcher Hans ;Huber Franz ;Maier Max ;Mustermann Helga ;Hofer Sonja ;Bauer
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. Eingebettet in Turbine newapp.modules.screens.Index templates/screens/Index.vm doBuildTemplate(Rundata d, Context ctx) { List rdfList = RdfPeer.doSelect(…); ctx.put(“entries“, rdfList) } #foreach ($entry in $entries) <tr> #entryCell ($entry.Title) #entryCell ($entry.Dept) </tr> #end
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
Context MVC schematisch
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)!!!!!
Syntax • Variablen deklarieren • Kommentare • Methoden / Eigenschaften • Bedingungen / Schleifen • Makros • Velocity benützen
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“
Falsch $Österreich $*Bereich $50jahre $_erledigt => muss mit Buchstaben anfangen Variablennamen Richtig • $hallo • $Hallo1 • $baum-haus • $baum_haus • $c_-504
Kommentare • kurzer Kommentar • ## einzeiliger Kommentar • Kommentarblock • #*Kommentar über mehrere Zeilen *#
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
Aufruf im Template • Methode $lva.getLeiter() aufrufen vom Template aus mit $lva.Leiter. • Velocity sucht nach: • 1: $lva.getleiter • 2: $lva.getLeiter
For Each – Schleife #foreach (Bedingung) Aktion #end Schleifenzähler: $velocityCount Bedingungen / Schleifen IF-Bedingung #if(Bedingung1) Aktion1 #elseif(Bedingung2) Aktion 2 #else Aktion 3 #end • Logische Operatoren NOT> !, AND> && OR> ||
#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 Einfügen von Dateien #include (“statisch.html“) • Datei nicht bearbeitet • direkt eingefügt • liegen in TEMPLATE_ROOT • möglich Datei über Variable einfügen
Makros: Velocimacros • Auslagerung von Scriptelementen • Zeitersparnis • einmalig definiert • Wiederholungen erspart • Sktruktur • #makro (testmakro) #end • Aufruf im Template • #testmakro ()
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)
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
Beispiel: NewappVelocity User Guidehttp://jakarta.apache.org/velocity/user-guide.html
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