PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer...

Post on 06-Apr-2015

118 views 3 download

Transcript of PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer...

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