Abbildung von: JavaServer Faces 2.2 - dpunkt

JavaServer Faces 2.2

Grundlagen und erweiterte Konzepte
dpunkt (Verlag)
3. Auflage
Erschienen am 17. Januar 2014
376 Seiten
E-Book
ePUB mit Wasserzeichen-DRM
E-Book
PDF mit Wasserzeichen-DRM
978-3-86491-432-4 (ISBN)
38,90 €inkl. 7% MwSt.
Systemvoraussetzungen
für ePUB mit Wasserzeichen-DRM und PDF mit Wasserzeichen-DRM
(Hinweis: Die Auswahl des von Ihnen gewünschten Dateiformats und des Kopierschutzes erfolgt erst im System des E-Book Anbieters)
E-Book Einzellizenz
Als Download verfügbar
Eine perfekte Webapplikation bedeutet hervorragende Interaktion mit dem Benutzer. Es ist nie einfach, eine solche Anwendung zu erstellen. Wir wollen Ihnen dabei helfen. Wir - das sind die Autoren dieses Buches, die Expertengruppe, die JavaServer Faces (JSF) spezifiziert hat, und die Entwickler des Apache-MyFaces-Projekts. Gemeinsam stellen wir Ihnen eine ausgereifte Technologie für die komponentenbasierte Entwicklung von Webapplikationen zur Verfügung.

Die Grundlagen des JavaServer-Faces-Standards werden auf einem für Einsteiger geeigneten Niveau erklärt und an einem durchgängigen Entwicklungsbeispiel erläutert. Ein Kickstart-Kapitel zeigt anhand eines kleinen Beispiels, wie einfach sich der Einstieg in JavaServer Faces (JSF) bewerkstelligen lässt. Begleitende Tipps & Tricks zeigen mögliche Probleme und deren Lösungen auf.

Neben den Grundlagen und Neuerungen von JSF 2.2 wie der HTML5-Unterstützung, einer Dateiuploadkomponente, Resource-Library- Contracts und Faces-Flows werden auch Themen wie Facelets, Templating, Kompositkomponenten und die Verwendung von Ajax mit JSF praxisnah behandelt. Das Buch zeigt außerdem die Integration von JSF und CDI und stellt die Komponentenbibliothek PrimeFaces vor.

Durch die langjährige Entwicklungsarbeit an MyFaces und die gleichzeitige Entwicklung von kleinen und großen Webprojekten mit JavaServer Faces kennen wir als Autoren exakt die Reibungsstellen beim Einsatz der neuen Technologie - und Sie als Leser können davon profitieren.
Auflage
vollständig überarbeitete Auflage
Sprache
Deutsch
Verlagsort
Heidelberg
Deutschland
Dateigröße
11,23 MB
ISBN-13
978-3-86491-432-4 (9783864914324)
Schlagworte
Schweitzer Klassifikation
Thema Klassifikation
DNB DDC Sachgruppen
BISAC Klassifikation
Warengruppensystematik 2.0
Michael Kurz studierte Informatik an der Technischen Universität Wien und hat sich seitdem in seiner beruflichen Tätigkeit dem Thema Webentwicklung verschrieben. Seit seinem Wechsel zu IRIAN beschäftigt er sich vorrangig mit JSF, und ist im Unternehmen als Webentwickler für mehrere JSF-Projekte tätig. Weiter leitet er JSF-Schulungen, hält Vorträge auf internationalen Konferenzen und ist Apache MyFaces Committer. Neben der Arbeit als Softwareentwickler schreibt er gerne über JSF und verwandte Themen - unter anderem auf seinem Blog http://jsflive. wordpress.com.

Martin Marinschek absolvierte das Studium der Internationalen BWL und der Computertechnik in Wien. Seither leitet er als Geschäftsführer der Firma IRIAN.at verschiedene Software-Engineering- Projekte und bietet Schulungen und Consulting im J2EEBereich an. Seit 2003 ist er Mitglied des MyFaces-Projekts und seit 2004 Committer der Apache Software Foundation. Er realisierte eine Vielzahl von großen Webprojekten mit JavaServer Faces, insbesondere mit Apache MyFaces. Gleichzeitig unterrichtet er an Fachhochschulen und Universitäten in Wien Web- und Software-Engineering. Als Mitglied der JSF 2.2 Expertgroup ist Martin Marinschek auch ein Co-Autor der aktuellen JSF-Spezifikation.
  • Intro
  • Inhaltsverzeichnis
  • Einführung in JavaServer Faces
  • Kurzgeschichte der Webentwicklung
  • Geschichte der Webentwicklung mit Java
  • Entstehung von JavaServer Faces
  • JSF 2.0 und 2.1 im Überblick
  • JSF 2.2 im Überblick
  • Das Ökosystem von JavaServer Faces
  • Das erste JSF-Beispiel
  • Softwareumgebung
  • Projektstruktur mit Maven
  • Hello World: das erste JSF-Projekt
  • Starten der Anwendung mit Maven
  • Entwicklung mit Eclipse
  • MyGourmet 1: Einführung anhand eines Beispiels
  • Die Konzepte von JavaServer Faces
  • Aufgaben der JSF-Technologie
  • JavaServer Faces in Schlagworten
  • MyGourmet 1: Schlagworte im Einsatz
  • Managed-Beans
  • Managed-Beans - die Grundlagen
  • Konfiguration von Managed-Beans
  • Managed-Properties
  • Die Rolle von Managed-Beans
  • Die Unified Expression Language
  • Unified-EL in MyGourmet 1
  • Die Unified-EL im Detail
  • Erweiterungen der Unified-EL in Java EE 6
  • Lebenszyklus einer HTTP-Anfrage in JSF
  • Ändern des Lebenszyklus - immediate-Attribut
  • MyGourmet 2: immediate-Attribute
  • Navigation
  • Ereignisse und Ereignisbehandlung
  • Value-Change-Events
  • Action-Events
  • MyGourmet 3: Ereignisse
  • System-Events
  • Phase-Events
  • MyGourmet 4: Phase-Listener und System-Events
  • Seitendeklarationssprachen
  • Vorteile von Facelets gegenüber JSP
  • Seitendeklarationssprachen im Einsatz
  • Verwendung des ID-Attributs in JSF
  • Konvertierung
  • Standardkonverter
  • Benutzerdefinierte Konverter
  • MyGourmet 5: Konvertierung
  • Validierung
  • Bean-Validation nach JSR-303
  • Standardvalidatoren
  • Benutzerdefinierte Validatoren
  • MyGourmet 6: Validierung
  • Nachrichten
  • Internationalisierung
  • Ermittlung des Lokalisierungscodes
  • Internationalisierung der JSF-Nachrichten
  • Internationalisierung der Anwendungstexte
  • MyGourmet 7: Internationalisierung
  • Standard-JSF-Komponenten
  • Basisfunktionen der Core-Tag-Library
  • Formularkomponente
  • Befehlskomponenten
  • DataTable-Komponente
  • Erweiterte Konzepte von h:dataTable
  • Styling von h:dataTable
  • Ausgabekomponenten
  • Textausgabekomponenten
  • Bildausgabekomponente
  • Eingabekomponenten
  • Texteingabefeld h:inputText
  • Passworteingabefeld h:inputSecret
  • Mehrzeiliges Texteingabefeld h:inputTextarea
  • Verstecktes Eingabefeld h:inputHidden
  • Dateiuploadfeld h:inputFile
  • Auswahlkomponenten
  • Boolesche Auswahl
  • Einfache Auswahl
  • Mehrfache Auswahl
  • Definition der Auswahlmöglichkeiten
  • Panel-Komponenten
  • UIViewRoot
  • Nachrichtenkomponenten
  • Komponenten zur GET-Navigation
  • Ressourcenbezogene Komponenten
  • Verhaltens-Interfaces
  • MyGourmet 8: Standardkomponenten
  • MyGourmet 9: UIData und Detailansicht
  • Advanced JSF
  • Project-Stage
  • Advanced Facelets
  • Wiederverwendung von Inhalten mit Facelets
  • Tag-Bibliotheken mit Facelets erstellen
  • MyGourmet 10: Advanced Facelets
  • Templating
  • Mehrstufiges Templating
  • Mehrere Templates pro Seite
  • MyGourmet 11: Templating mit Facelets
  • Bookmarks und GET-Anfragen in JSF
  • Navigation mit h:link und h:button
  • View-Parameter
  • View-Actions
  • MyGourmet 12: GET-Unterstützung
  • Die JSF-Umgebung: Faces-Context und External-Context
  • Konfiguration von JavaServer Faces
  • Die Webkonfigurationsdatei web.xml
  • Die JSF-Konfigurationsdatei - faces-config.xml
  • Konfiguration der Unified-EL
  • Verwaltung von Ressourcen
  • Identifikation von Ressourcen - Teil 1
  • Ressourcen im Einsatz
  • Positionierung von Ressourcen
  • Identifikation von Ressourcen - Teil 2
  • Ressourcen in MyGourmet 12
  • Resource-Library-Contracts
  • Ein erstes Beispiel
  • Ressourcen aus Resource-Library-Contracts
  • Zuordnung von Resource-Library-Contracts
  • Resource-Library-Contracts in Jar-Dateien
  • MyGourmet 12 mit Resource-Library-Contracts
  • Die eigene JSF-Komponente
  • Kompositkomponenten
  • Eine erste Kompositkomponente
  • Der Bereich cc:interface
  • Der Bereich cc:implementation
  • Ressourcen in Kompositkomponenten
  • Die Komponente mc:panelBox
  • Die Komponente mc:dataTable
  • Die Komponente mc:collapsiblePanel
  • Die Komponente mc:inputSpinner
  • Fallstricke in der Praxis
  • Klassische Komponenten
  • Vorarbeiten: Komponentenfamilie, Komponententyp und Renderertyp definieren
  • Komponentenklasse schreiben
  • Rendererklasse schreiben
  • Registrieren der Komponenten- und der Rendererklasse
  • Tag-Definition schreiben
  • Tag-Behandlungsklasse schreiben
  • Tag-Bibliothek einbinden
  • Kompositkomponenten und klassische Komponenten kombinieren
  • Alternativen zur eigenen Komponente
  • Austausch der Rendererklasse
  • Austausch der Komponentenklasse
  • Benutzerdefinierte Komponente aus den Backing-Beans - Component-Binding
  • MyGourmet 13: Komponenten und Services
  • Die eigene Komponentenbibliothek
  • MyGourmet 13 mit Komponentenbibliothek
  • Ajax und JSF
  • Einführung in Ajax - "Asynchronous JavaScript And XML"
  • Ajax ab JSF 2.0
  • Ein erstes Beispiel mit f:ajax
  • f:ajax im Einsatz
  • Ereignisse und Listener in Ajax-Anfragen
  • JavaScript-API
  • Partieller JSF-Lebenszyklus
  • Ajax-Queue kontrollieren
  • Eingabefelder zurücksetzen
  • Ajax in Kompositkomponenten
  • Eigene Ajax-Komponenten
  • Die Kompositkomponente mc:ajaxStatus
  • Die Kompositkomponente mc:ajaxPoll
  • MyGourmet 14: Ajax
  • Werkzeuge für den Ajax-Entwickler
  • Firebug
  • HTTP-Debugger
  • Web Developer Toolbar
  • JSF und HTML5
  • Verarbeitungsmodi für Facelets-Dateien
  • HTML5 Pass-Through-Attribute
  • HTML5 Pass-Through-Elemente
  • MyGourmet 15: HTML5
  • JSF und CDI
  • Beans und Dependency-Injection mit CDI
  • Managed-Beans mit CDI
  • Producer-Methoden
  • Konfiguration von CDI
  • MyGourmet 16: Integration von CDI
  • Konversationen mit JSF
  • Apache MyFaces CODI
  • Konversationen mit CODI
  • View-Config und Page-Beans
  • MyGourmet 17: Apache MyFaces CODI
  • PrimeFaces - JSF und mehr
  • PrimeFaces - ein Überblick
  • Komponenten
  • Erweiterte Standardkomponenten
  • Auswahl einiger PrimeFaces-Komponenten
  • Themes
  • PrimeFaces und Ajax
  • Erweiterungen im Vergleich zu Standard-JSF
  • Ajax-Komponenten
  • Komponenten mit Ajax-Unterstützung
  • MyGourmet 18: PrimeFaces
  • Integration von PrimeFaces
  • Umstellung auf PrimeFaces-Komponenten
  • Benutzerdefiniertes Theme
  • Faces-Flows
  • Ein erstes Beispiel
  • Definition von Flows
  • Typen von Flow-Knoten
  • Definition mit XML
  • Definition mit Java
  • Flow-Scope
  • Managed-Beans im Flow-Scope
  • Direkter Zugriff auf den Flow-Scope
  • Faces-Flows in Jar-Dateien
  • Beispiel Faces-Flows
  • MyGourmet Fullstack - JSF, CDI und JPA mit CODI kombiniert
  • Architektur von MyGourmet Fullstack
  • Entitäten
  • Datenzugriffsschicht
  • Serviceschicht
  • Präsentationsschicht
  • Anhang
  • Eine kurze Einführung in Maven
  • Installation von Maven
  • Maven und MyGourmet
  • Erstellen eines JSF-Projekts
  • Eclipse
  • Installation von Eclipse mit Maven-Unterstützung
  • Eclipse und MyGourmet
  • Apache Tomcat 7 in Eclipse einrichten
  • Stichwortverzeichnis

1 Einführung in JavaServer Faces


Vielfalt der Technologien

JavaServer Faces (JSF) ist eine moderne Technologie zur Entwicklung von Webanwendungen. Allerdings steht sie nicht allein auf weiter Flur – es gibt Dutzende als Open Source veröffentlichte und Hunderte proprietäre Frameworks für die Entwicklung von Webapplikationen alleine im Java-Bereich, andere Programmiersprachen außer Acht gelassen. Der Elefant unter diesen Frameworks im Java-Bereich ist sicher Apache Struts, aber auch Apache Wicket und Apache Tapestry sind sehr erfolgreich. Die erste Frage ist also, warum sich solch eine Vielfalt von Frameworks entwickelt hat und weshalb die Notwendigkeit für die Spezifizierung der JavaServer Faces-Technologie entstand – immerhin gibt es doch mit der Servlet- und JSP-Technologie schon eine solide Basis für die dynamische Erstellung von Webseiten. Die Beschreibung der geschichtlichen Entwicklung der Webprogrammierung wird hier zum Verständnis beitragen.

1.1 Kurzgeschichte der Webentwicklung


HTML und HTTP

Alles begann mit der Übertragung der ersten Seite in Hypertext Markup Language (HTML) über das Hypertext Transfer Protocol (HTTP) im August 1991. Nur wenige Visionäre ahnten damals, welche Entwicklung das World Wide Web über die Jahre nehmen würde. Exponentielles Wachstum war dem World Wide Web in die Wiege gelegt worden – dies galt für die Verbreitung genauso wie für die technologische Entwicklung. Anfangs war HTML eine einfache Sprache zur Bedeutungsauszeichnung von Textteilen. Durch die vielfache Anwendung in den verschiedensten Bereichen wurde HTML immer mehr hin zur Layoutsprache erweitert. Dem daraus entstandenen Wildwuchs an Auszeichnungselementen für die unterschiedlichsten Zwecke wurde die Layoutsprache CSS (Cascading Style Sheets) entgegengesetzt. Begleitend zu diesen statischen Sprachen wurde auch das dynamische Element durch die Verwendung von JavaScript im Webbrowser immer wichtiger.

Server

Zur selben Zeit war eine ähnliche Revolution der Sprachen und Skriptsprachen am Server im Gange – unzählige serverseitige Technologien kämpften um die Gunst der Webentwickler, Perl, Phyton, PHP, Ruby und natürlich Java sind nur einige Beispiele. Kein Wunder, dass durch diese hohe Anzahl an involvierten Technologien die Entwicklung von großen, hochdynamischen Webanwendungen immer komplexer wurde – die Entwickler mussten bei der Bewältigung dieser Komplexität unterstützt werden.

1.1.1 Geschichte der Webentwicklung mit Java

Servlets

Im Java-Bereich war die Entwicklung der Servlet-Technologie 1997 der erste Schritt zur dynamischen Generierung von HTML-Seiten am Server. Im Wesentlichen beruht diese Technologie darauf, dass in den Java-Code Befehle eingebunden werden, die zur Erzeugung von HTML dienen. Praktisch bedeutet das den Aufruf der Funktion println auf einem OutputStream wie in Listing 1.1.

Listing 1.1
Beispiel für ein einfaches Servlet. Hier wird die GET-Methode der HTTP-Anfrage behandelt.

 1  public class BeispielServlet extends HttpServlet {
 2    public void doGet(HttpServletRequest req,
 3                    HttpServletResponse res)
 4        throws ServletException, IOException {
 5      String name = req.getParameter("name");
 6      String text = req.getParameter("text");
 7
 8      res.setContentType("text/html");
 9
10      ServletOutputStream out = res.getOutputStream();
11      out.println("<html><head><title>");
12      out.println(name);
13      out.println("</title></head><body>");
14      out.println(text);
15      out.println("</body></html>");
16      out.flush();
17    }
18  }

Sie können sich leicht vorstellen, dass diese Erzeugung von HTML aus normalem Java-Code bei langen HTML-Passagen schwer verständlich und unübersichtlich wird. In einem zweiten Schritt entstanden daher Hilfsklassen, die das Schreiben von HTML-Tags durch den Aufruf gewisser Methoden erleichterten. Die Erstellung von HTML beschränkte sich somit auf den Aufruf dieser Methoden, wie Listing 1.2 zeigt.

JSP

Für komplexe HTML-Seiten war auch diese Vorgehensweise nicht optimal, was zur Entwicklung der JavaServer Pages-(JSP-)Technologie führte. Ein Beispiel in dieser Sprache findet sich in Listing 1.3. Hier ist HTML die treibende Kraft und in die einzelnen Tags der HTML

Listing 1.2
Beispiel für eine einfache (jedoch unvollständige) Hilfsklasse zum Schreiben von HTML-Code in Servlets

 1   public class ServletUtility {
 2     private HttpServletResponse res;
 3     public ServletUtility(HttpServletResponse res) {
 4       this.res = res;
 5     }
 6     public void startTag(String tagName) {
 7       res.print("<");
 8       res.print(tagName);
 9     }
10     public void endTag(String tagName) {
11       res.print("</");
12       res.print(tagName);
13       res.print(">");
14     }
15     ...
16   }

sind in sogenannten Scriptlets die Aufrufe der Java-Methoden zur Ausgabe der dynamischen Teile der HTML-Seite eingebunden. Dieser Ansatz erleichterte die Erstellung von komplexen HTML-Seiten mit viel eingebautem JavaScript-Code und einer hohen Anzahl an CSS-Auszeichnungen ungemein.

Listing 1.3
Ein einfaches JSP-Beispiel

1   <%@ page language="java" %>
2   <html>
3     <head>
4       <title><%=request.getParameter("name");%></title>
5     </head>
6     <body>
7       <%=request.getParameter("text");%>
8     </body>
9   </html>

Alles, was »benutzt« werden kann, kann allerdings auch »missbraucht« werden, und genau dieser Fall trat für die JSP-Technologie ein. Die Entwickler begannen, immer mehr Code in die einzelnen JSP-Seiten aufzunehmen, bis erneut eine hochkomplexe Mischung aus HTML-Tags und Java-Code entstand. Diese Mischung war genauso schlecht wartbar wie die in Servlet-Code eingebaute HTML-Generierung. Ein weiterer Kritikpunkt an der Verwendung von JSP war, dass der eingebaute Sourcecode erst zum Zeitpunkt des Anwendungsstarts im Applikationsserver kompiliert wurde, und viele Fehler, die normalerweise bei der Erstellung von Java-Klassen aus dem Sourcecode bereits beseitigt worden waren, erst zur Laufzeit auftraten. Die Bedeutung dieses Problems steigt selbstverständlich mit der Menge des in die JSP-Seite eingebundenen Sourcecodes.

Webframeworks

Zur Lösung dieses Problems traten Webframeworks auf den Plan. Der Entwickler wird bei Benutzung eines Frameworks dazu angehalten, möglichst große Teile der Layoutbeschreibung in einer Seitendeklarationssprache wie JSP zu erstellen und gleichzeitig möglichst wenig Funktionalität im Sinne von Anwendungslogik zwischen die Elemente der Seitendeklarationssprache einzufügen.

Model-View-Controller (MVC)

Ein klarer Schnitt zwischen den Bereichen Modell, Ansicht und Steuerungslogik ist also notwendig – dieses Entwicklungsmuster wird auch Model-View-Controller-Muster (kurz MVC) genannt und ist in Abbildung 1.1 dargestellt.

Abbildung 1.1
Das Model-View-Controller-Prinzip

Model2 – MVC für das...

Dateiformat: ePUB
Kopierschutz: Wasserzeichen-DRM (Digital Rights Management)

Systemvoraussetzungen:

  • Computer (Windows; MacOS X; Linux): Verwenden Sie eine Lese-Software, die das Dateiformat ePUB verarbeiten kann: z.B. Adobe Digital Editions oder FBReader – beide kostenlos (siehe E-Book Hilfe).
  • Tablet/Smartphone (Android; iOS): Installieren Sie die App Adobe Digital Editions oder eine andere Leseapp für E-Books, z.B. PocketBook (siehe E-Book Hilfe).
  • E-Book-Reader: Bookeen, Kobo, Pocketbook, Sony, Tolino u.v.a.m. (nicht Kindle)

Das Dateiformat ePUB ist sehr gut für Romane und Sachbücher geeignet - also für „fließenden” Text ohne komplexes Layout. Bei E-Readern oder Smartphones passt sich der Zeilen- und Seitenumbruch automatisch den kleinen Displays an.
Mit Wasserzeichen-DRM wird hier ein „weicher” Kopierschutz verwendet. Daher ist technisch zwar alles möglich – sogar eine unzulässige Weitergabe. Aber an sichtbaren und unsichtbaren Stellen wird der Käufer des E-Books als Wasserzeichen hinterlegt, sodass im Falle eines Missbrauchs die Spur zurückverfolgt werden kann. 

Weitere Informationen finden Sie in unserer  E-Book Hilfe.

Dateiformat: PDF
Kopierschutz: Wasserzeichen-DRM (Digital Rights Management)

Systemvoraussetzungen:

  • Computer (Windows; MacOS X; Linux): Verwenden Sie zum Lesen die kostenlose Software Adobe Reader, Adobe Digital Editions oder einen anderen PDF-Viewer Ihrer Wahl (siehe E-Book Hilfe).
  • Tablet/Smartphone (Android; iOS): Installieren Sie bereits vor dem Download die kostenlose App Adobe Digital Editions oder die App PocketBook (siehe E-Book Hilfe).
  • E-Book-Reader: Bookeen, Kobo, Pocketbook, Sony, Tolino u.v.a.m. (nur bedingt: Kindle)

Das Dateiformat PDF zeigt auf jeder Hardware eine Buchseite stets identisch an. Daher ist eine PDF auch für ein komplexes Layout geeignet, wie es bei Lehr- und Fachbüchern verwendet wird (Bilder, Tabellen, Spalten, Fußnoten). Bei kleinen Displays von E-Readern oder Smartphones sind PDF leider eher nervig, weil zu viel Scrollen notwendig ist. Mit Wasserzeichen-DRM wird hier ein „weicher” Kopierschutz verwendet. Daher ist technisch zwar alles möglich – sogar eine unzulässige Weitergabe. Aber an sichtbaren und unsichtbaren Stellen wird der Käufer des E-Books als Wasserzeichen hinterlegt, sodass im Falle eines Missbrauchs die Spur zurückverfolgt werden kann.

Weitere Informationen finden Sie in unserer  E-Book Hilfe.