61
JSF Basics Ralf Gitzel [email protected] 1

JSF Basics - ralf-gitzel.inforalf-gitzel.info/JEE-13-05-JSF_Basics.pdfEigenschaften von Servlets Stärken • Flexibel weil nahe am HTTP Protokoll (get/post, manueller Seitenaufbau)

  • Upload
    doantu

  • View
    214

  • Download
    0

Embed Size (px)

Citation preview

JSF Basics

Ralf [email protected]

1

Themenübersicht

Ralf [email protected]

2

Übersicht

• Konzepte von JSF• Managed Beans• Expression Language• Grundlegende JSF Tags

3

Konzepte von JSF

Ralf [email protected]

4

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

JSF- technisch

9

RequestWeb Container

JSF Servlet

Response

UnfertigeSeite(JSF)

FertigeHTMLSeite

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

Managed Beans

Ralf [email protected]

12

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

Expression Language

Ralf [email protected]

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

Grundlegende JSF Tags

Ralf [email protected]

30

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:inputText

35

Der Wert wird bei derManagedBean in „name“

geschrieben!

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

h:commandButton

37

Text auf dem Button Aufzurufende Methode

Hinter den Kulissen

38

Lernziele

Ralf [email protected]

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 [email protected]

41

Projekt anlegen

Deployment Descriptorerzeugen

JSF Einstellungen

Ggf. zuerstherunterladen

JSTL Bibliotheken einfügen

Herunterladenund reinkopieren

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)

Filename (!)

49

test.xhtml

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 derhello-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 nichtals Managed Bean sondern in derManaged Bean

58

Anhang - Debugging

Ralf [email protected]

59

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…

Faces-config

• Achtung: Wenn hier falsche Wertestehen (z.B. nach einem Klassen-Rename) dann findet man den Fehler nursehr schwer.