JEE Architektur (vereinfacht)
5
RequestWeb Container
Servlet
Response
EJB Container
EJBDB
Per
sist
ence
Pro
vide
r
Eigenschaften von Servlets
Stärken• Flexibel weil nahe am HTTP
Protokoll (get/post, manuellerSeitenaufbau)
• Leichter Einstieg für Kennervon Webtechnologien
Schwächen• Routineaufgaben
(Verifizierung, Konvertierung)müssen immer wieder neuprogrammiert werden
• Man muss das Web-Paradigma verstehen, umServlets anwenden zu können
6
Alternativkonzept JSF
7
Reguläre„leere“HTMLSeite
Neue Tags(z.B. für
Fehlermeldungen)
ExpressionLanguage
(Ausdrücke, z.B.Zugriff auf Beans)
JSFSeite
„gefüllte“HTML-Seite
JSFServlet
Alternativkonzept JSF
• Konzept: Wir schreiben HTML-Seitenmit einer erweiterten Tag-Liste undExpression Language Ausdrücken
• Typische Umsetzung: Im Hintergrundläuft ein Servlet, das diese Seiten inkorrektes HTML umsetzt.
• Überwiegend serverseitige Lösung(unterstützt aber in neueren VersionenAJAX über JavaScript)
8
Wichtige Funktionalitäten inJSF
• Navigationsregeln• Seitentemplates• Validierung und Konvertierung von
Eingabewerten• Event-getriebene GUIs mit komplexen
Elementen• AJAX• Einfache Anbindung an JEE Server
10
Hinweis: JSP vs. JSF
• JSPs (Java Server Pages) folgen einerähnlichen Philosophie, sind aber seit JEE6 „deprecated“
• Trotzdem kommen JSPs in vielen Firmennoch zum Einsatz
• Generell sind JSF mächtiger als JSPs,bauen aber nur indirekt auf den JSP-Konzepten auf
11
Konzept der Managed Bean
• Managed Beans stehen in der JSF-Seite alszugreifbare Objekte zur Verfügung
• Eine Managed Bean ist ein normales Java-Objekt (POJO), dessen Lebenszyklus vomContainer verwaltet wird
• Markierung über eine Annotation(Anmerkung: Das Java-Annotationskonzeptwird später im Detail erklärt) oder über diefaces-config.xml
13
Annotationen einer ManagedBean
14
Markierungder
ManagedBeanMarkierung
eines Properties
NormaleZugriffsmethoden
Müssen publicsein, sonst siehtder Server sie
nicht!
Zugriff auf die Managed Bean
• Properties können in der JSF Seiteverwendet werden (mehr dazu später)
• Methoden, die keine Parameter habenund String zurückgeben, könnenaufgerufen werden (mehr dazu später)
• Weitere Methodenaufrufe sind in neuenVersionen geplant
15
Managed Bean Scope• Die bekannten Scopes können mit Managed
Beans genutzt werden.• Wichtige Scopes:
– @RequestScoped: Existiert für eine Request.Default-Einstellung, wenn kein Scope definiertwurde.
– @ViewScoped: Steht in der aktuellen View zurVerfügung (interessant bei mehreren Tabs imBrowser)
– @SessionScoped: Steht während der ganzenSession zur Verfügung
– @ApplicationScoped: Steht in der ganzenApplikation zur Verfügung
16
Hinweis zum Session Scope
• Wir müssen nicht mehr explizit Sessionserzeugen und „bestücken“
• Die Managed Bean ist jetzt unserEinstiegspunkt in die Session-Information
17
Model-View-Controller
• Grundidee: Wir trennen dieProgrammlogik von der Darstellung
• Vorteile:– Darstellung kann leicht ausgetauscht
werden– Arbeitsteilung: Webdesigner muss keinen
Code schreiben– Änderungen am Code können leichter
vorgenommen werden18
Umsetzung mit JSFs (Schritte)
JSF-Seite als Eingabe
Controller: Standard JSF Servlet ruft Managed Beansauf, die über den Modellzugriff und weiterenKontrollfluss entscheiden
Model: Klassen mit Geschäftslogik stellen ein Modellder Wirklichkeit dar
Controller: Servlet gibt Ergebnisse an Ausgabe weiter
View: JSF zeigt die Ergebnisse an
19
Faustregeln
• Nie Logik in der JSF programmieren(was ohnehin schwierig ist)
• Nie Teile der Darstellung im Servlet oderder Geschäftslogik generieren (Übergabeeines HTML Ergebnisstrings etc.)
• Managed Beans sollten keine Modell-Daten enthalten (nur Kopien davon)
• Anmerkung: Es gibt wenige Ausnahmen,die Klausur gehört nicht dazu!
20
Managed Bean als Controller• Managed Bean Optionen:
– verweist auf Datenobjekte– Speichert die Daten temporär und kopiert sie
dann in ein Model• Die Managed Bean sollte nicht das
Datenobjekt selbst sein (was aber technischmöglich ist)
• Die Trennung ist leider nicht immer sosauber…
21
Unified Expression Language
• Neu eingeführt in der JSF-Version 2.1• Basiert auf der JSP-EL (aus JSP 2.0)
und einer älteren Version der JSF-EL(aus JSF 2.0)
• Hier nur ein Abriss der für uns wichtigenElemente!
• Die EL erlaubt uns u.a. Zugriff aufJavaklassen (Methoden und Attribute)
23
Expression Language -Grundsyntax
24
#{Expression} Hier kommt keine JavaSyntax zum Einsatz!
(Erinnert eher an XSLT.)
Rückgabewert wird andieser Stelle in der HTML
Seite eingefügt
z.B. ganz normal in Text
z.B. in Attributen von Tags
Was ist eine Expression?1. Zugriff auf ManagedBean2. Zugriff auf andere Objekte3. Logische Ausdrücke
25Datei: helloPage.xhtml
Problem – komplexe Objekte
Komplexe Objekte können nicht einfachüber diese Form der Expression abgefragtwerden!• Maps (wie z.B. die impliziten Objekte)• Listen• etc.
26
Expressions für komplexe Objekte
27
#{x[‘y’]}
Zugriff auf eineMap
X=Map-NameY=Schlüssel Zugriff auf eine
List bzw. einArray
X=List-NameY=Array/List Index(Mit oder ohneAnführungszeichen)
Zugriff auf eineBean
X=Objekt-NameY=Property Name
Die NotationName.attr ist
synonym
Wichtiger Hinweis zu Beans
• Der Property Name ist in der Klassegroßgeschrieben
• Der Property Name ist in der ELkleingeschrieben
28
Expressions als (logische)Ausdrücke
29
#{x lt 10}Operator Verwendung
- ! Negation (Minus als Vorzeichen, boolsche Negation)
* / % div mod Multiplikations- und Divisionsoperatoren
+ - Additions- und Subtraktionsoperator
< <= >= > lt le gegt Vergleichsoperatoren I
== != eq ne Vergleichsoperatoren II
&& and UND
|| or ODER
Ist ‚true‘ wenn x keinerals 10 ist.
Hinweis
• JSF hat sehr viele Tags mit sehr vielenParametern
• Hier lernen wir nur die absoluten Basicskennen – vor allem wenn verschiedeneWege zum gleichen Ziel führen!
• Anmerkung: Namespaces werden nichterklärt, sondern als Teil des Tag-Namenspräsentiert
31
Übersicht der grundlegendenTags
Tag Beschreibungh:form Markiert den Bereich einer Seite, der einer HTML-
Form entsprichth:inputText Eingabe eines Textes, der direkt in eine
Instanzvariable einer Managed Bean geschriebenwird
h:commandButton Abschicken eines ausgefüllten Formulars
32
h:form• Markiert den Bereich einer Seite, der einer HTML-Form
entspricht• Erscheint als <form> in der HTML-Seite• Vorteil: Wegen der Managed Bean muss man hier
weder Zielservlet noch Method angeben!
33
Attribut Verwendungszweck
h:inputText• Eingabe eines Textes, der direkt in eine
Instanzvariable einer Managed Bean geschrieben wird• Erscheint als Textfeld in der HTML-Seite
34
Attribut Verwendungszweckvalue Ein EL-Ausdruck, der ein Feld in einer Managed Bean
beschreibt, das diesem Wert entspricht (2 Effekte: Wosoll das Ergebnis gespeichert werden und was ist derDefault-Wert?)
required Muss dieses Feld ausgefüllt werden? (True/False)style/ styleClass Zur Verwendung von CSS Stylestitle Tooltip Text
h:commandButton• Abschicken eines ausgefüllten Formulars
36
Attribut Verwendungszweckaction EL-Ausdruck, der eine Methode spezifiziert, die
aufgerufen werden soll, wenn dieser Knopf gedrücktwird. Die Methode muss eine Folgeseite (ohne .jsf oder.xhtml) als String zurückgeben und hat keineParameter.
image URL eines Bildes, das anstelle des normalen Buttonsangezeigt werden soll
value EL-Ausdruck oder Stringliteral mit der Beschriftung desButtons
Weitere style, styleClass, title – wie bereits beschrieben
Lernziele
• Konzept JSF verstehen• Managed Beans benutzen können• MVC-Konzept richtig nutzen• Expression Language verwenden können• Programmieren der Schleife „Web-
Seite/Managed Bean/Model/Web-Seite“
40
46
Schritt 1: Wo kann ich die Dateienherunterladen?
• URL: http://jstl.java.net/download.html• Es werden beide Dateien benötigt
Weiterleitungs-JSP erstellen
Kleiner Trick, damitwir das Projekteinfach testen
können…
Name der eigenenJSF…
Erzeugen einer JSF Seite
• New -> HTML File (Rechtsklick bei Web-Content)
• XHTML File (Anmerkung: Endung istnicht .jfs sondern .xhtml, sonst aber wiein der Startseite definiert)
• Passendes Template (z.B. New FaceletComposition Page, wir löschen den Inhaltohnehin)
Zielseite
• Trägt den Namen, der als Rückgabewert derhello-Methode zurückgegeben wurde.
• (Komplexere Navigation das nächste Mal)
56
Zusatzaufgaben – Bei Restzeit
• Personeneingabe aus den altenÜbungen programmieren
• Personenobjekt verwenden, aber nichtals Managed Bean sondern in derManaged Bean
58
Debugging Hinweis
• Wenn das Programm nicht mehr startetund nicht mal die erste einfache Seiteangezeigt wird, kann es sein, dass esbeim Deployment einen Fehler gab, deraber Eclipse nicht daran hindert zustarten…