23
PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

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

Embed Size (px)

Citation preview

Page 1: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

PR SE Workshop "Velocity"1

-Velocity Template Engine

                                                                                                                             

Doppelhammer Eva, 0159008

Oberndorfer Norbert, 0155621

Page 2: 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

Page 3: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

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

Page 4: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

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

Page 5: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

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???

Page 6: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

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

Page 7: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

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

Page 8: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

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

Page 9: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

PR SE Workshop "Velocity"9

MVC schematisch

Context

Page 10: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

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)!!!!!

Page 11: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

PR SE Workshop "Velocity"11

Syntax

• Variablen deklarieren• Kommentare• Methoden / Eigenschaften

• Bedingungen / Schleifen

• Makros

• Velocity benützen

Page 12: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

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“

Page 13: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

PR SE Workshop "Velocity"13

VariablennamenRichtig

• $hallo

• $Hallo1

• $baum-haus

• $baum_haus

• $c_-504

Falsch

• $Österreich

• $*Bereich

• $50jahre

• $_erledigt

=> muss mit Buchstaben anfangen

Page 14: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

PR SE Workshop "Velocity"14

Kommentare

• kurzer Kommentar

– ## einzeiliger Kommentar

• Kommentarblock

– #*Kommentar über mehrere Zeilen *#

Page 15: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

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

Page 16: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

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

Page 17: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

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

Page 18: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

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

Page 19: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

PR SE Workshop "Velocity"19

Makros: Velocimacros• Auslagerung von Scriptelementen

• Zeitersparnis– einmalig definiert

– Wiederholungen erspart

• Sktruktur– #makro (testmakro)

#end

• Aufruf im Template– #testmakro ()

Page 20: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

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)

Page 21: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

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

Page 22: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

PR SE Workshop "Velocity"22

Beispiel: Newapp

Velocity User Guidehttp://jakarta.apache.org/velocity/user-guide.html

Page 23: PR SE Workshop "Velocity" 1 - Velocity Template Engine Doppelhammer Eva, 0159008 Oberndorfer Norbert, 0155621

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