JSF Basics Ralf Gitzel ralf_gitzel@hotmail.de 1
Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2
Übersicht Konzepte von JSF Managed Beans Expression Language Grundlegende JSF Tags 3
Konzepte von JSF Ralf Gitzel ralf_gitzel@hotmail.de 4
JEE Architektur (vereinfacht) Request Web Container Response Servlet EJB Container DB Persistence Provider EJB 5
Eigenschaften von Servlets Stärken Flexibel weil nahe am HTTP Protokoll (get/post, manueller Seitenaufbau) Leichter Einstieg für Kenner von Webtechnologien Schwächen Routineaufgaben (Verifizierung, Konvertierung) müssen immer wieder neu programmiert werden Man muss das Web- Paradigma verstehen, um Servlets anwenden zu können 6
Alternativkonzept JSF Neue Tags (z.b. für Fehlermeldungen) Reguläre leere HTML Seite Expression Language (Ausdrücke, z.b. Zugriff auf Beans) JSF Seite JSF Servlet gefüllte HTML-Seite 7
Alternativkonzept JSF Konzept: Wir schreiben HTML-Seiten mit einer erweiterten Tag-Liste und Expression Language Ausdrücken Typische Umsetzung: Im Hintergrund läuft ein Servlet, das diese Seiten in korrektes HTML umsetzt. Überwiegend serverseitige Lösung (unterstützt aber in neueren Versionen AJAX über JavaScript) 8
JSF- technisch Request Web Container Response Fertige HTML Seite JSF Servlet Unfertige Seite (JSF) 9
Wichtige Funktionalitäten in Navigationsregeln Seitentemplates JSF 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 JEE 6 deprecated Trotzdem kommen JSPs in vielen Firmen noch zum Einsatz Generell sind JSF mächtiger als JSPs, bauen aber nur indirekt auf den JSP- Konzepten auf 11
Managed Beans Ralf Gitzel ralf_gitzel@hotmail.de 12
Konzept der Managed Bean Managed Beans stehen in der JSF-Seite als zugreifbare Objekte zur Verfügung Eine Managed Bean ist ein normales Java- Objekt (POJO), dessen Lebenszyklus vom Container verwaltet wird Markierung über eine Annotation (Anmerkung: Das Java-Annotationskonzept wird später im Detail erklärt) oder über die faces-config.xml 13
Annotationen einer Managed Bean Markierung der ManagedBean Markierung eines Properties Müssen public sein, sonst sieht der Server sie nicht! Normale Zugriffsmethoden 14
Zugriff auf die Managed Bean Properties können in der JSF Seite verwendet werden (mehr dazu später) Methoden, die keine Parameter haben und String zurückgeben, können aufgerufen werden (mehr dazu später) Weitere Methodenaufrufe sind in neuen Versionen 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 definiert wurde. @ViewScoped: Steht in der aktuellen View zur Verfügung (interessant bei mehreren Tabs im Browser) @SessionScoped: Steht während der ganzen Session zur Verfügung @ApplicationScoped: Steht in der ganzen Applikation zur Verfügung 16
Hinweis zum Session Scope Wir müssen nicht mehr explizit Sessions erzeugen und bestücken Die Managed Bean ist jetzt unser Einstiegspunkt in die Session-Information 17
Model-View-Controller Grundidee: Wir trennen die Programmlogik von der Darstellung Vorteile: Darstellung kann leicht ausgetauscht werden Arbeitsteilung: Webdesigner muss keinen Code schreiben Änderungen am Code können leichter vorgenommen werden 18
Umsetzung mit JSFs (Schritte) JSF-Seite als Eingabe Controller: Standard JSF Servlet ruft Managed Beans auf, die über den Modellzugriff und weiteren Kontrollfluss entscheiden Model: Klassen mit Geschäftslogik stellen ein Modell der 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 oder der Geschäftslogik generieren (Übergabe eines 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 technisch möglich ist) Die Trennung ist leider nicht immer so sauber 21
Expression Language Ralf Gitzel ralf_gitzel@hotmail.de 22
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 wichtigen Elemente! Die EL erlaubt uns u.a. Zugriff auf Javaklassen (Methoden und Attribute) 23
Expression Language - Grundsyntax #{Expression} Hier kommt keine Java Syntax zum Einsatz! (Erinnert eher an XSLT.) Rückgabewert wird an dieser Stelle in der HTML Seite eingefügt z.b. ganz normal in Text z.b. in Attributen von Tags 24
Was ist eine Expression? 1. Zugriff auf ManagedBean 2. Zugriff auf andere Objekte 3. Logische Ausdrücke Datei: hellopage.xhtml 25
Problem komplexe Objekte Komplexe Objekte können nicht einfach über diese Form der Expression abgefragt werden! Maps (wie z.b. die impliziten Objekte) Listen etc. 26
Expressions für komplexe Objekte #{x[ y ]} Zugriff auf eine Map X=Map-Name Y=Schlüssel Zugriff auf eine List bzw. ein Array X=List-Name Y=Array/List Index (Mit oder ohne Anführungszeichen) Zugriff auf eine Bean X=Objekt-Name Y=Property Name Die Notation Name.attr ist synonym 27
Wichtiger Hinweis zu Beans Der Property Name ist in der Klasse großgeschrieben Der Property Name ist in der EL kleingeschrieben 28
Expressions als (logische) Ausdrücke #{x lt 10} Operator Verwendung Ist true wenn x keiner als 10 ist. -! Negation (Minus als Vorzeichen, boolsche Negation) * / % div mod Multiplikations- und Divisionsoperatoren + - Additions- und Subtraktionsoperator < <= >= > lt le ge gt Vergleichsoperatoren I ==!= eq ne Vergleichsoperatoren II && and UND or ODER 29
Grundlegende JSF Tags Ralf Gitzel ralf_gitzel@hotmail.de 30
Hinweis JSF hat sehr viele Tags mit sehr vielen Parametern Hier lernen wir nur die absoluten Basics kennen vor allem wenn verschiedene Wege zum gleichen Ziel führen! Anmerkung: Namespaces werden nicht erklärt, sondern als Teil des Tag-Namens präsentiert 31
Übersicht der grundlegenden Tags Tag h:form h:inputtext h:commandbutton Beschreibung Markiert den Bereich einer Seite, der einer HTML- Form entspricht Eingabe eines Textes, der direkt in eine Instanzvariable einer Managed Bean geschrieben wird 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! Attribut Verwendungszweck 33
h:inputtext Eingabe eines Textes, der direkt in eine Instanzvariable einer Managed Bean geschrieben wird Erscheint als Textfeld in der HTML-Seite Attribut value required style/ styleclass title Verwendungszweck Ein EL-Ausdruck, der ein Feld in einer Managed Bean beschreibt, das diesem Wert entspricht (2 Effekte: Wo soll das Ergebnis gespeichert werden und was ist der Default-Wert?) Muss dieses Feld ausgefüllt werden? (True/False) Zur Verwendung von CSS Styles Tooltip Text 34
h:inputtext Der Wert wird bei der ManagedBean in name geschrieben! 35
h:commandbutton Abschicken eines ausgefüllten Formulars Attribut action image value Weitere Verwendungszweck EL-Ausdruck, der eine Methode spezifiziert, die aufgerufen werden soll, wenn dieser Knopf gedrückt wird. Die Methode muss eine Folgeseite (ohne.jsf oder.xhtml) als String zurückgeben und hat keine Parameter. URL eines Bildes, das anstelle des normalen Buttons angezeigt werden soll EL-Ausdruck oder Stringliteral mit der Beschriftung des Buttons style, styleclass, title wie bereits beschrieben 36
h:commandbutton Text auf dem Button Aufzurufende Methode 37
Hinter den Kulissen 38
Lernziele Ralf Gitzel ralf_gitzel@hotmail.de 39
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
Übungsaufgabe Ralf Gitzel ralf_gitzel@hotmail.de 41
Projekt anlegen
Deployment Descriptor erzeugen
JSF Einstellungen Ggf. zuerst herunterladen
JSTL Bibliotheken einfügen Herunterladen und reinkopieren
Schritt 1: Wo kann ich die Dateien herunterladen? URL: http://jstl.java.net/download.html Es werden beide Dateien benötigt 46
Weiterleitungs-JSP erstellen Name der eigenen JSF Kleiner Trick, damit wir das Projekt einfach testen können
Erzeugen einer JSF Seite New -> HTML File (Rechtsklick bei Web- Content) XHTML File (Anmerkung: Endung ist nicht.jfs sondern.xhtml, sonst aber wie in der Startseite definiert) Passendes Template (z.b. New Facelet Composition Page, wir löschen den Inhalt ohnehin)
Filename (!) test.xhtml 49
Auswahl der Templates 50
Content löschen 51
Seite editieren
Hallo Welt programmieren 53
Managed Bean entwickeln 54
Abgleich JSF und Bean 55
Zielseite Trägt den Namen, der als Rückgabewert der hello-methode zurückgegeben wurde. (Komplexere Navigation das nächste Mal) 56
Zielseite hellopage.xhtml 57
Zusatzaufgaben Bei Restzeit Personeneingabe aus den alten Übungen programmieren Personenobjekt verwenden, aber nicht als Managed Bean sondern in der Managed Bean 58
Anhang - Debugging Ralf Gitzel ralf_gitzel@hotmail.de 59
Debugging Hinweis Wenn das Programm nicht mehr startet und nicht mal die erste einfache Seite angezeigt wird, kann es sein, dass es beim Deployment einen Fehler gab, der aber Eclipse nicht daran hindert zu starten
Faces-config Achtung: Wenn hier falsche Werte stehen (z.b. nach einem Klassen- Rename) dann findet man den Fehler nur sehr schwer.