JavaServer FacesKapitel 4: JavaServer Faces im Detail
Max Mustermann
Uni MusterhausenFachbereich Informatik
Wintersemester 2006/07
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 1 / 36
Grundlage der Folien
Bernd MullerJavaServer FacesEin Arbeitsbuch fur die PraxisHanser-VerlagISBN 3-446-40677-834,90 EuroBei Amazon kaufen
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 2 / 36
Ziel
Detailierte Beschreibung aller Konzepte, Mechanismen und Hintergrundezentraler JSF-Gebiete
I Bearbeitungsmodell
I JSF-Expression-Language
I Backing-Beans
I Validierung und Konvertierung
I Event-Verarbeitung
I Navigation
I Internationalisierung
I Konfiguration
I Client-Ids und Komponenten-Ids
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 3 / 36
4.1 Bearbeitungsmodell einer JSF-Anfrage
Bearbeitungsmodell einer JSF-Anfrage
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 4 / 36
4.1 Bearbeitungsmodell einer JSF-Anfrage
HTTP, Servlets, MCV, Zustand, . . .
Problem:
I JSF werden durch (ein) Servlet(s) implementiert
I damit HTTP-basiert
I wie passt das mit zustandsbehafteten Komponenten und MVCzusammen?
Losung:I sehr viel Aufwand treiben, um HTTP und dessen Nachteile zu
verstecken:I Zustande der Komponenten implementierenI Event-Modell definieren (das alte, bekannte!)I . . . daher . . .I Aufteilen der Request-Bearbeitung in einzelne Schritte
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 5 / 36
4.1 Bearbeitungsmodell einer JSF-Anfrage
Prinzipiell unterscheiden ob von/nach JSF-Seite
I Es gibt vier Kombinationsmoglichkeiten von JSF-Anfrage undJSF-Antwort mit anderen Anfragen und Antworten
Tabelle 4.1: Moglichkeiten von Anfragen und AntwortenJSF-Anfrage andere Anfrage
JSF-Antwort 1 2
andere Antwort 3 4
I 1: JSF-Seite ruft JSF-Seite
I 2: z.B. HTML-Seite linkt auf JSF-Seite
I 3: z.B. JSF-Seite erzeugt PDF
I 4: hat nichts mit JSF zu tun
Die folgenden Ausfuhrungen beziehen sich in der Regel auf den 1. Fall
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 6 / 36
4.1 Bearbeitungsmodell einer JSF-Anfrage
Das Bearbeitungsmodell einer JSF-Anfrage
Eve
nt−V
erar
beitu
ng
Eve
nt−V
erar
beitu
ng
Eve
nt−V
erar
beitu
ng
Eve
nt−V
erar
beitu
ng
des
Kom
pone
nten
baum
esW
iede
rher
stel
lung
Anf
rage
wer
teÜ
bern
ahm
e de
r
Val
idie
rung
Mod
ello
bjek
teA
ktua
lisie
rung
der
Anw
endu
ngsl
ogik
Auf
ruf d
er
Ren
dern
der
Ant
wor
t
Fehl
er
Fehl
er
Fehl
er
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 7 / 36
4.1 Bearbeitungsmodell einer JSF-Anfrage 4.1.1 Wiederherstellung des Komponentenbaumes
Wiederherstellung desKomponentenbaumes
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 8 / 36
4.1 Bearbeitungsmodell einer JSF-Anfrage 4.1.1 Wiederherstellung des Komponentenbaumes
Komponentenbaum
I die View ist eine nicht sichtbare Komponente und Wurzel desKomponentenbaumes einer Seite
I sie enthalt damit alle Komponenten der Seite
I Komponenten werden zwischen der Antwort und einer erneutenAnfrage gespeichert
I dies kann auf dem Client oder dem Server geschehen
I der View wird eine View-Id zugeordnet, die aus dem Anfrage-URIbesteht
I bei /bank/pages/login.jsf also /pages/login.jsfI View-Id wird in Session gespeichert, daher feststellbar ob
I Anfrage von JSF-Seite kommt (Alternative 1 in Tabelle 4.1), oderI zum ersten Mal besucht wird (Alternative 2 in Tabelle 4.1)
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 9 / 36
4.1 Bearbeitungsmodell einer JSF-Anfrage 4.1.1 Wiederherstellung des Komponentenbaumes
Speichern und Wiederherstellen
I in Alternative 1 wird gespeicherter Komponentenbaumwiederhergestellt
I im Alternative 2 wird ein neuer Komponentenbaum erstellt
I Komponentenbaum (neuer oder wiederhergestellter) wird dann imFacesContext gespeichert
I FacesContext enthalt alle Informationen im Zusammenhang derBearbeitung einer JSF-Anfrage
I Wiederherstellung umfasst auch Wiederherstellen aller verbundenenEvent-Listener, Validierer, Konvertierer und Backing-Beans
I wird Seite zum ersten Mal besucht (Alternative 2 Tabelle 4.1) wirdzur Render-Response-Phase gesprungen, ansonsten zur Ubernahmeder Anfragewerte
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 10 / 36
4.1 Bearbeitungsmodell einer JSF-Anfrage 4.1.2 Ubernahme der Anfragewerte
Ubernahme der Anfragewerte
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 11 / 36
4.1 Bearbeitungsmodell einer JSF-Anfrage 4.1.2 Ubernahme der Anfragewerte
Ubernahme der Anfragewerte
I einige UI-Komponenten lassen Benutzereingaben zu
I das zugrunde liegende HTML-Formular schickt diese alsPOST-Request per HTTP an den Server
I dieser POST-String muss geparst werden und die Parameter mit ihrenjeweiligen Werten mussen herausgefiltert werden
I diese Werte werden dann vorlaufig den Komponenten zugewiesen
I vorlaufig, weil Konvertierung und Validierung noch schief gehenkonnen
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 12 / 36
4.1 Bearbeitungsmodell einer JSF-Anfrage 4.1.3 Validierung
Validierung
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 13 / 36
4.1 Bearbeitungsmodell einer JSF-Anfrage 4.1.3 Validierung
Konvertierung und Validierung
I jetzt sind alle Anfrageparameter fur UI-Komponenten verfugbar
I vor Validierung muss noch konvertiert werden
I alle Post-Parameter sind Strings, daher in entsprechenden Typkonvertieren (automatisch fur Character, Boolean, Byte, Integer,Short, Long, Float, Double und deren primitive Versionen sowieBigDecimal und BigInteger)
I Validierer uberprufen dann Eingaben
I eingebaut: required="true"
I eingebaut: Zahlen von bis, String-Lange
I jetzt der Komponente Wert zuweisen
I falls Wertanderung, ValueChangeEvent werfen
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 14 / 36
4.1 Bearbeitungsmodell einer JSF-Anfrage 4.1.4 Aktualisierung der Modellobjekte
Aktualisierung der Modellobjekte
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 15 / 36
4.1 Bearbeitungsmodell einer JSF-Anfrage 4.1.4 Aktualisierung der Modellobjekte
Aktualisierung der Modellobjekte
I jetzt sicher, dass alle Werte vom richtigen Typ und valide sind
I also den Modellobjekten zuweisen (bis jetzt alles ohne Modellobjekte)
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 16 / 36
4.1 Bearbeitungsmodell einer JSF-Anfrage 4.1.4 Aktualisierung der Modellobjekte
Beispiel
<h:inputText id="betrag" required="true"value="#{ ueberweisungHandler.betrag}">
Das Property betrag des Objekts ueberweisungsHandler bekommt denWert des Eingabefeldes mit der Id betrag zugewiesen (Setter-Aufruf).
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 17 / 36
4.1 Bearbeitungsmodell einer JSF-Anfrage 4.1.5 Aufruf der Anwendungslogik
Aufruf der Anwendungslogik
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 18 / 36
4.1 Bearbeitungsmodell einer JSF-Anfrage 4.1.5 Aufruf der Anwendungslogik
Aufruf der Anwendungslogik
I bis jetzt alles automatisch ohne Anwendungslogik:I decodierenI KonvertierenI ValidierenI Wertzuweisung (Setter-Aufruf)
I Anwendungslogik durch Action-Listener
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 19 / 36
4.1 Bearbeitungsmodell einer JSF-Anfrage 4.1.5 Aufruf der Anwendungslogik
Action-Listener
Verschiedene Moglichkeiten (Details spater)
<h:commandButton id="feld-0"image="#{ tttHandler.image [0]}"
actionListener="#{ tttHandler.zug}" />
<h:commandButton value="Anmelden"action="#{ kundenHandler.login}" />
<h:commandButton id="button" value="OK"action="success">
<f:actionListener ...
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 20 / 36
4.1 Bearbeitungsmodell einer JSF-Anfrage 4.1.6 Rendern der Antwort
Rendern der Antwort
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 21 / 36
4.1 Bearbeitungsmodell einer JSF-Anfrage 4.1.6 Rendern der Antwort
Rendern der Antwort
I Rendern durch Spezifikation nicht festgelegt
I jede JSF-konforme Implementierung muss mindestens JSP/HTMLunterstutzen
I in Kapitel 8 werden wir Alternativen kennen lernen (XHTML, XUL)
I zuletzt Abspeichern des Komponentenbaumes
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 22 / 36
4.1 Bearbeitungsmodell einer JSF-Anfrage 4.1.6 Rendern der Antwort
Aufgabe
Laden Sie die Datei web/WEB-INF/web.xml derOnline-Banking-Anwendung aus Kapitel 2 in Ihren Editor. DerContext-Parameter javax.faces.STATE SAVING METHOD kann die Werteclient und server haben. Testen Sie beide, indem Sie neu deployen unddie erzeugten HTML-Seiten analysieren. Erkennen Sie den Unterschied?
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 23 / 36
4.2 JSF-Expression-Language
JSF-Expression-Language
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 24 / 36
4.2 JSF-Expression-Language
JSF-Expression-Language
I die JSF-Expression-Language (JSF-EL) ahnelt derJSP-Expression-Language (syntaktisch)
I sie sind jedoch nicht kompatibel
I JSF-EL wird zwei Mal ausgewertet (Aktualisierung Modellobjekte undRender-Phase)
I es gibt Bestrebungen, dies zu andern (Unified Expression Language)
I Navigation uber Objekt-Properties analog zu XPath
I Syntax:"#{ ... }"
I StringI fangt mit Hash (Nummernzeichen, Lattenzaun) anI ist in geschweifte Klammern eingeschlossen
I Inhalt: arith. oder log. Ausdrucke, Wertebindungen,Methodenbindungen
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 25 / 36
4.2 JSF-Expression-Language 4.2.1 Bean-Properties
Bean-Properties
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 26 / 36
4.2 JSF-Expression-Language 4.2.1 Bean-Properties
Bean-Properties
I eine Wertebindung (engl. Value Binding) bindet Wert einerUI-Komponente an Bean-Property (und umgekehrt)
I oder UI-Komponente selbst an Property
I oder UI-Komponenten-Property initialisiert
I eine Methodenbindung (engl. Method Binding) bindet Wert einerUI-Komponente an Bean-Methode (wird bei Event-Handlern undValidierungsmethoden verwendet)
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 27 / 36
4.2 JSF-Expression-Language 4.2.1 Bean-Properties
Beispiele fur Wertebindungen
<h:outputText value="Zugriff auf Bean-Properties:"style="font-weight: bold;" />
<h:outputText value="#{ elHandler.name}" /><h:outputText value="#{ elHandler[’name ’]}" /><h:outputText value="Dies sind tolle #{ elHandler.name}" /><h:outputText value="#{ elHandler.array [0]}" /><h:outputText value="#{ elHandler.map[’zwei ’]}" /><h:outputText
value="#{ elHandler.map[elHandler.array [2]]}" />
Zeitpunkt der Auswertung
I Lesen (Getter) in der Phase Rendern der Antwort
I Schreiben (Setter) in Phase Aktualisierung der Modellobjekte
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 28 / 36
4.2 JSF-Expression-Language 4.2.1 Bean-Properties
Was ist elHandler?
Eine Managed-Bean der Klasse ElHandler
public class ELHandler {
private String name = "Uebungen mit der Expression -Language";private Integer jahr = 2006;private String [] array = new String []{ "eins", "zwei", "drei" };private Map map = new HashMap ();
public ELHandler () {super ();map.put("eins", "Erster Map -Eintrag");map.put("zwei", "Zweiter Map -Eintrag");map.put("drei", "Dritter Map -Eintrag");
}
...}
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 29 / 36
4.2 JSF-Expression-Language 4.2.2 Vordefinierte Variablen
Vordefinierte Variablen
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 30 / 36
4.2 JSF-Expression-Language 4.2.2 Vordefinierte Variablen
Variablenname Beschreibung
header Eine Map von Request-Header-Werten. Schlussel ist derHeader-Name, Ruckgabewert ist ein String.
headerValues Eine Map von Request-Header-Werten. Schlussel ist derHeader-Name, Ruckgabewert ist ein Array von Strings.
cookie Eine Map von Cookies (javax.servlet.http.Cookie).Schlussel ist der Cookie-Name.
initParam Eine Map von Initialisierungsparametern der Anwendung.Diese werden im Deployment-Deskriptor definiert.
param Eine Map von Anfrageparametern. Schlussel ist derParametername. Ruckgabewert ist ein String.
paramValues Eine Map von Anfrageparametern. Schlussel ist derParametername. Ruckgabewert ist ein Array von Strings.
facesContext Die FacesContext-Instanz der aktuellen Anfrage.view Die aktuelle View.requestScope Eine Map von Variablen mit Request-Scope.sessionScope Eine Map von Variablen mit Session-Scope.applicationScope Eine Map von Variablen mit Application-Scope.
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 31 / 36
4.2 JSF-Expression-Language 4.2.2 Vordefinierte Variablen
Beispiele mit vordefinierten Variablen
<h:outputTextvalue="Zugriff auf implizite JSF-EL-Objekte:"style="font-weight: bold;" />
<h:outputText value="#{ header[’User-Agent ’]}" />
<h:outputText value="#{view.locale}" />
<h:outputTextvalue="#{ initParam[’javax.faces.STATE_SAVING_METHOD ’]}" />
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 32 / 36
4.2 JSF-Expression-Language 4.2.3 Arithmetische und logische Ausdrucke
Arithmetische und logische Ausdrucke
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 33 / 36
4.2 JSF-Expression-Language 4.2.3 Arithmetische und logische Ausdrucke
Arithmetische und logische Ausdrucke
I JSF-EL umfasst vollstandige Arithmetik und Logik
I damit in der Regel kein Ruckgriff auf Java notig
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 34 / 36
Op Alt. Beschreibung
. Zugriff auf eine Property, Methode oder einen Map-Eintrag
[] Zugriff auf ein Array- oder Listen-Element oder einen Map-Eintrag
() Klammerung fur Teilausdrucke
?: Bedingter Ausdruck:<expr> ? <true-value> : <false-value>
+ Addition
- Subtraktion oder negative Zahl
* Multiplikation
/ div Division
% mod Modulo
== eq gleich
!= ne ungleich
< lt kleiner
> gt großer
<= le kleiner-gleich
>= ge großer-gleich
&& and logisches UND
|| or logisches ODER
! nor logische Negation
empty Test auf null, einen leeren String, oder Test auf Array, Mapoder Collection ohne Elemente
4.2 JSF-Expression-Language 4.2.3 Arithmetische und logische Ausdrucke
Beispiele arithische und logische Ausdrucke
<h:outputText value="Arithmetische Ausdruecke:"
style="font-weight: bold;" />
<h:outputText value="#{17 + 4}" />
<h:outputText
value="Das uebernaechste Jahr ist #{ elHandler.jahr + 2}" />
<h:outputText
value="#{ elHandler.jahr} ist #{(( elHandler.jahr % 4)
== 0 ? ’ein ’ : ’kein ’)} Schaltjahr" />
<h:outputText value="Boole ’sche Ausdruecke:"
style="font-weight: bold;" />
<h:outputText value="#{’konstante ’ == ’konstante ’}" />
<h:outputText value="#{ elHandler.jahr > 2000}" />
<h:outputText
value="#{ elHandler.jahr > 2000 && (elHandler.jahr %4 != 0)}" />
Max Mustermann (FBI, Uni Musterhausen) JSF Kapitel 4: JavaServer Faces im Detail WS 2006/07 36 / 36