JAVA SERVER FACES 2.0 bernd MÜLLER EIN ARBEITSBUCH FÜR DIE PRAXIS 2. Auflage Inhaltsverzeichnis Vorwort zur 2. Auflage . . . . . . . . . . . . . . . . . . . . . . . . . . XI Vorwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XIII 1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 Ziel dieses Buches . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Der Leser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 Das Buch im Netz . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.4 Verwendete Software . . . . . . . . . . . . . . . . . . . . . . . . 5 1.5 Aufbau des Buches . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.6 JSF-Versionen vor 2.0 . . . . . . . . . . . . . . . . . . . . . . . 7 2 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.1 Was sind JavaServer Faces? . . . . . . . . . . . . . . . . . . . . 9 2.2 JavaServer Faces und Zukunftssicherheit . . . . . . . . . . . . . 10 2.3 Neuerungen in JavaServer Faces 2.0 . . . . . . . . . . . . . . . 11 2.4 Spezifikationen und Implementierungen . . . . . . . . . . . . . 12 2.5 Die erste JSF-Anwendung: Tic-Tac-Toe . . . . . . . . . . . . . 12 3 Die Anwendung Comedians . . . . . . . . . . . . . . . . . . . . . 21 3.1 JSF-Seiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2 Managed Beans . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.3 JPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4 JavaServer Faces im Detail . . . . . . . . . . . . . . . . . . . . . 35 4.1 Bearbeitungsmodell einer JSF-Anfrage . . . . . . . . . . . . . . 35 VI Inhaltsverzeichnis 4.1.1 Wiederherstellung des Komponentenbaums . . . . . . . 38 4.1.2 U¨bernahme der Anfragewerte . . . . . . . . . . . . . . . 39 4.1.3 Validierung . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.1.4 Aktualisierung der Modellobjekte . . . . . . . . . . . . . 41 4.1.5 Aufruf der Anwendungslogik . . . . . . . . . . . . . . . 41 4.1.6 Rendern der Antwort . . . . . . . . . . . . . . . . . . . 42 4.2 Expression-Language . . . . . . . . . . . . . . . . . . . . . . . . 43 4.2.1 Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.2.2 Bean-Properties . . . . . . . . . . . . . . . . . . . . . . 44 4.2.3 Vordefinierte Variablen . . . . . . . . . . . . . . . . . . 47 4.2.4 Vergleiche, arithmetische und logische Ausdru¨cke . . . . 49 4.2.5 Methodenaufrufe und Methodenparameter . . . . . . . . 52 4.2.6 Verwendung der Expression-Language in Java . . . . . . 53 4.3 Managed Beans . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.3.1 Architekturfragen . . . . . . . . . . . . . . . . . . . . . 55 4.3.2 Automatische Verwaltung von Managed Beans . . . . . 56 4.3.3 Initialisierung . . . . . . . . . . . . . . . . . . . . . . . . 58 4.3.4 Komponentenbindung . . . . . . . . . . . . . . . . . . . 64 4.3.5 Java-EE-5-Annotationen . . . . . . . . . . . . . . . . . . 68 4.3.6 JSF-Annotationen . . . . . . . . . . . . . . . . . . . . . 68 4.4 Validierung und Konvertierung . . . . . . . . . . . . . . . . . . 72 4.4.1 Standardkonvertierer . . . . . . . . . . . . . . . . . . . . 72 4.4.2 Konvertierung von Kalenderdaten und Zahlen . . . . . . 77 4.4.3 Konvertierung von Aufz¨ahlungstypen . . . . . . . . . . 81 4.4.4 Anwendungsdefinierte Konvertierer . . . . . . . . . . . . 84 4.4.5 Standardvalidierer . . . . . . . . . . . . . . . . . . . . . 87 4.4.6 Validierungsmethoden . . . . . . . . . . . . . . . . . . . 92 4.4.7 Anwendungsdefinierte Validierer . . . . . . . . . . . . . 94 4.4.8 Eingabekomponenten und das immediate-Attribut . . . 95 4.4.9 Bean-Validierung mit JSR 303 . . . . . . . . . . . . . . 98 4.4.10 Fehlermeldungen . . . . . . . . . . . . . . . . . . . . . . 105 4.5 Event-Verarbeitung . . . . . . . . . . . . . . . . . . . . . . . . . 114 4.5.1 JSF-Events und allgemeine Event-Verarbeitung . . . . . 115 Inhaltsverzeichnis VII 4.5.2 Action-Events . . . . . . . . . . . . . . . . . . . . . . . . 117 4.5.3 Befehlskomponenten und das immediate-Attribut . . . 121 4.5.4 Value-Change-Events . . . . . . . . . . . . . . . . . . . 122 4.5.5 Data-Model-Events . . . . . . . . . . . . . . . . . . . . . 127 4.5.6 Phase-Events . . . . . . . . . . . . . . . . . . . . . . . . 128 4.5.7 System-Events . . . . . . . . . . . . . . . . . . . . . . . 130 4.6 Navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 4.6.1 Implizite Navigation . . . . . . . . . . . . . . . . . . . . 134 4.6.2 View-to-View-Regeln . . . . . . . . . . . . . . . . . . . . 135 4.6.3 Regeln fu¨r mehrere Seiten . . . . . . . . . . . . . . . . . 138 4.6.4 Regeln fu¨r Action-Methoden . . . . . . . . . . . . . . . 139 4.6.5 Regeln zur bedingten Navigation . . . . . . . . . . . . . 139 4.6.6 Redirects . . . . . . . . . . . . . . . . . . . . . . . . . . 140 4.6.7 Verweise auf Nicht-JSF-Seiten. . . . . . . . . . . . . . . 141 4.6.8 View-Parameter und Lesezeichen . . . . . . . . . . . . . 143 4.6.9 Die technische Sicht . . . . . . . . . . . . . . . . . . . . 146 4.7 Internationalisierung . . . . . . . . . . . . . . . . . . . . . . . . 147 4.7.1 Lokalisierung . . . . . . . . . . . . . . . . . . . . . . . . 148 4.7.2 Dynamische und explizite Lokalisierung . . . . . . . . . 155 4.7.3 Klassen als Resource-Bundles . . . . . . . . . . . . . . . 156 4.7.4 Managed Beans und Lokalisierung . . . . . . . . . . . . 159 4.8 Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 4.8.1 Die Servlet-Konfiguration . . . . . . . . . . . . . . . . . 161 4.8.2 Die JSF-Konfiguration . . . . . . . . . . . . . . . . . . . 170 4.8.3 XML-Konfigurationsdatei versus Annotationen . . . . . 179 4.9 Client-Ids und Komponenten-Ids . . . . . . . . . . . . . . . . . 180 4.9.1 Id-Arten und Namensr¨aume . . . . . . . . . . . . . . . . 180 4.9.2 Client- und server-seitige Programmierung mit Ids . . . 184 4.10 Verwendung allgemeiner Ressourcen . . . . . . . . . . . . . . . 187 4.10.1 Einfache Ressourcen . . . . . . . . . . . . . . . . . . . . 188 4.10.2 Versionierte Ressourcen und Ressourcen-Bibliotheken . 189 4.10.3 Positionierung von Ressourcen . . . . . . . . . . . . . . 191 4.11 JSTL-Bibliotheken . . . . . . . . . . . . . . . . . . . . . . . . . 194 VIII Inhaltsverzeichnis 5 Die UI-Komponenten . . . . . . . . . . . . . . . . . . . . . . . . . 199 5.1 Die Standardkomponenten . . . . . . . . . . . . . . . . . . . . . 200 5.2 Render-S¨atze . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 5.3 Die JSF-Standard-Bibliotheken . . . . . . . . . . . . . . . . . . 204 5.4 Die HTML-Bibliothek . . . . . . . . . . . . . . . . . . . . . . . 206 5.5 Die Kernbibliothek . . . . . . . . . . . . . . . . . . . . . . . . . 208 5.6 Die Facelets-Bibliothek . . . . . . . . . . . . . . . . . . . . . . . 210 5.7 Die Composite-Component-Bibliothek . . . . . . . . . . . . . . 211 5.8 Die JSTL-Kern- und Funktionsbibliothek . . . . . . . . . . . . 212 6 Facelets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 6.1 Templating mit Facelets . . . . . . . . . . . . . . . . . . . . . . 215 6.2 Ein Template-Beispiel: UPN-Rechner . . . . . . . . . . . . . . . 218 6.3 Dynamische Templates . . . . . . . . . . . . . . . . . . . . . . . 223 6.4 Weitere Facelets-Tags . . . . . . . . . . . . . . . . . . . . . . . 225 6.5 Entwicklung eigener Komponenten . . . . . . . . . . . . . . . . 228 6.6 JSF-Tags als Attribute der Standard-HTML-Tags . . . . . . . . 234 7 Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 7.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 7.2 Die Grundlagen von Ajax in JSF 2.0 . . . . . . . . . . . . . . . 239 7.2.1 JSFs JavaScript-Bibliothek . . . . . . . . . . . . . . . . 240 7.2.2 Das <f:ajax>-Tag . . . . . . . . . . . . . . . . . . . . . 242 7.2.3 Das u¨berarbeitete Bearbeitungsmodell einer JSF-Anfrage 245 7.3 Weiterfu¨hrende Themen . . . . . . . . . . . . . . . . . . . . . . 247 7.3.1 Navigation . . . . . . . . . . . . . . . . . . . . . . . . . 247 7.3.2 JavaScript mit Java . . . . . . . . . . . . . . . . . . . . 248 7.3.3 Nicht gerenderte Komponenten . . . . . . . . . . . . . . 250 7.3.4 Abgeku¨rzte Komponenten-Ids . . . . . . . . . . . . . . . 252 7.4 Ajax mit RichFaces . . . . . . . . . . . . . . . . . . . . . . . . . 253 7.4.1 Die <a4j:support>-Komponente . . . . . . . . . . . . . 254 7.4.2 Die <a4j:outputPanel>-Komponente . . . . . . . . . . 256 7.4.3 Die <a4j:region>-Komponente . . . . . . . . . . . . . 257 Inhaltsverzeichnis IX 7.4.4 Die <a4j:commandButton>- und <a4j:commandLink>- Komponenten . . . . . . . . . . . . . . . . . . . . . . . . 259 7.4.5 Die <a4j:poll>-Komponente . . . . . . . . . . . . . . . 259 7.4.6 Die <a4j:log>-Komponente. . . . . . . . . . . . . . . . 260 7.5 RichFaces-Komponenten mit eingebauter Ajax-Unterstu¨tzung . 261 7.5.1 Drag and Drop . . . . . . . . . . . . . . . . . . . . . . . 262 7.5.2 B¨aume . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 7.5.3 Darstellung großer Datenmengen . . . . . . . . . . . . . 278 8 JavaServer Faces im Einsatz: Das Online-Banking . . . . . . 285 8.1 Der Seitenaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . 286 8.2 Das Gesch¨aftsmodell . . . . . . . . . . . . . . . . . . . . . . . . 289 8.3 Authentifizierung und Autorisierung . . . . . . . . . . . . . . . 292 8.3.1 Realisierung der Authentifizierung . . . . . . . . . . . . 293 8.3.2 Die Abmeldung . . . . . . . . . . . . . . . . . . . . . . . 295 8.4 Pflege der Stammdaten . . . . . . . . . . . . . . . . . . . . . . 296 8.5 U¨berweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 8.6 Anzeige aller Konten . . . . . . . . . . . . . . . . . . . . . . . . 303 8.7 Anzeige der Ums¨atze . . . . . . . . . . . . . . . . . . . . . . . . 306 8.8 Export der Ums¨atze im PDF- und Excel-Format . . . . . . . . 310 9 JavaServer Faces und Java-EE . . . . . . . . . . . . . . . . . . . 317 9.1 Java-EE 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 9.2 Java-EE 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 9.3 CDI und Weld . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 9.4 Konversationen mit CDI . . . . . . . . . . . . . . . . . . . . . . 327 9.5 Weitere Neuerungen in Java-EE 6. . . . . . . . . . . . . . . . . 333 9.5.1 Servlet 3.0. . . . . . . . . . . . . . . . . . . . . . . . . . 333 9.5.2 Web-Profile . . . . . . . . . . . . . . . . . . . . . . . . . 334 9.5.3 Managed Beans . . . . . . . . . . . . . . . . . . . . . . . 335 9.6 Authentifizierung und Autorisierung mit JBoss Seam . . . . . . 336 10 Systeme und Werkzeuge . . . . . . . . . . . . . . . . . . . . . . . 345 10.1 GlassFish . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 X Inhaltsverzeichnis 10.1.1 Installation und Betrieb . . . . . . . . . . . . . . . . . . 346 10.1.2 Die Datenbank JavaDB . . . . . . . . . . . . . . . . . . 348 10.1.3 Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . 350 10.2 Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 10.2.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . 353 10.2.2 GlassFish-Plugin . . . . . . . . . . . . . . . . . . . . . . 354 10.2.3 JBoss Tools . . . . . . . . . . . . . . . . . . . . . . . . . 356 10.2.4 Projekte . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 10.3 Firebug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 10.4 Selenium . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 10.4.1 Selenium-IDE . . . . . . . . . . . . . . . . . . . . . . . . 362 10.4.2 Selenium-RC . . . . . . . . . . . . . . . . . . . . . . . . 365 10.5 JSFUnit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 A Annotationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 A.1 JSF-Annotationen . . . . . . . . . . . . . . . . . . . . . . . . . 375 A.2 Annotationen fu¨r Managed Beans . . . . . . . . . . . . . . . . . 378 B Die Tags der Standardbibliotheken . . . . . . . . . . . . . . . . 383 B.1 HTML-Attribute . . . . . . . . . . . . . . . . . . . . . . . . . . 384 B.2 JavaScript-basierte HTML-Attribute . . . . . . . . . . . . . . . 386 B.3 HTML- und JSF-Attribute fu¨r CSS . . . . . . . . . . . . . . . . 388 B.3.1 Regeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388 B.3.2 Klassen- und Id-Selektoren . . . . . . . . . . . . . . . . 389 B.4 HTML-Tag-Bibliothek . . . . . . . . . . . . . . . . . . . . . . . 390 B.5 Kernbibliothek . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 B.6 Facelets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 C URL-Verzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477 Literaturverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 Sachverzeichnis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 Kapitel 2 Motivation JavaServerFacessindalsTeilderSpezifikationenJava-EE5undJava-EE6un- abdingbarer Bestandteil eines jeden entsprechenden Application-Servers. Die beiden weiteren GUI-relevanten Spezifikationen innerhalb von Java-EE sind Servlets und JavaServer Pages. Das Einsatzgebiet von Servlets ist jedoch die Realisierung von Frameworks, wie JSF es eines ist, und nicht die Erstellung kompletter Gesch¨aftsanwendungen. JavaServer Pages werden nicht mehr wei- terentwickelt. JavaServer Faces sind also die einzige praxisrelevante Spezifika- tion fu¨r die Entwicklung von Gesch¨aftsanwendungen innerhalb von Java-EE undmu¨ssendahereigentlichnichtmotiviertwerden.Wirwollendieshiertrotz- dem tun, um dem Leser bereits an dieser Stelle einen U¨berblick u¨ber einige der herausragenden Eigenschaften von JSF zu geben. 2.1 Was sind JavaServer Faces? JavaServer Faces u¨bernehmen nicht nur die Routineaufgaben, die in einer Servlet- oder JSP-Anwendung zu programmieren sind. JavaServer Faces defi- nieren ein Komponentenmodell fu¨r Benutzerschnittstellenelemente einer Web- Anwendung, so wie Swing ein Komponentenmodell fu¨r lokale Oberfl¨achen de- finiert. So existieren etwa Komponenten fu¨r die Texteingabe, zur Auswahl von Menu¨-Eintr¨agen oder fu¨r die Anzeige von Fehlermeldungen. Diese Kom- ponenten k¨onnen ganz analog zu Swing-Komponenten hierarchisch angeord- net werden, indem man sie in Containern verschachtelt. Neue Komponenten, z.B. ein Kalender, k¨onnen entwickelt und dann wie vordefinierte Komponen- ten verwendet werden. JSF-Komponenten leben auf dem Server, sind in Java programmiert und in einer Anwendung mit Java als Implementierungssprache 10 2 Motivation verwendbar. Die als Antwort einer HTTP-Anfrage an einen Client geschick- ten HTML-Seite (andere Antwortarten sind m¨oglich) stellen ein Abbild des Komponentenbaums des Servers dar. Bei der Entwicklung grafischer Benutzeroberfl¨achen (GUI, Graphical User In- terface) hat sich das Model-View-Controller-Entwurfsmuster (MVC Pattern) durchgesetzt. Es wird durch JavaServer Faces komplett realisiert. MVC trennt streng zwischen Modell, View und Controller. Das Modell ist das Gesch¨afts- modell der Anwendung. In ihm sind die fachlichen Klassen, etwa Kunde und Rechnung, sowie die fachliche Logik enthalten. Die View ist ausschließlich fu¨r die Darstellung verantwortlich, sie darf keine Anwendungslogik enthalten. Der Controller ist schließlich die Instanz, die alle Steuerungsvorg¨ange der Oberfl¨a- che mit dem Benutzer regelt und A¨nderungen des Benutzers in der View mit demModellkonsistenth¨alt.Sieenth¨altdamitzumeinendieOberfl¨achenlogik, etwa Knopf A kann nur gedru¨ckt werden, wenn im Eingabefeld B ein Wert ” gr¨oßer 100 steht“, aber auch die entsprechenden Methoden, um die Eingabe einer neuen Kundenadresse bis zum Modell durchzureichen. Bei JavaServer Faces ist das Modell beliebig w¨ahlbar. POJOs (Plain Old Java Objects), EJBs (Enterprise JavaBeans) oder beliebige andere Java-Objekte sindm¨oglich.DieViewistebenfallsnichtfestgelegt.ZwargibtdieSpezifikation als m¨ogliche Realisierung HTML vor, d.h. jede JSF-Implementierung muss mindestens eine HTML-View bereitstellen, andere, etwa WML oder Flash, sind aber ebenfalls denkbar und m¨oglich. Der Controller wird in JSF zum einen durch die schon erw¨ahnten Komponenten realisiert, zum anderen durch so genannte Handler, die in Java zu realisieren sind. Es l¨asst sich trefflich daru¨ber streiten, ob die Komponenten nicht zur View geh¨oren. Sind nicht sie es, die Eingabefelder und Kn¨opfe darstellen? Dies ist einerseits sicher richtig, andererseits sieht der Benutzer aber nicht die Kom- ponente an sich, sondern die aus der Komponente generierte Darstellung, die sich z.B. im Web und auf dem Handy sehr unterscheiden kann. Hinzu kommt, dass in der Komponente angegeben wird, ob sie u¨berhaupt darzustellen ist, und, wenn ja, ob sie fu¨r Benutzeraktionen empf¨anglich ist. 2.2 JavaServer Faces und Zukunftssicherheit Der Java-Community-Process (JCP [URL-JCP] ) wurde 1998 ins Leben geru- fen, um Spezifikationen der Java-Plattform zu entwickeln und fortzuschrei- ben. Sun versuchte damit die Furcht vieler Firmen vor einer monopolisti- schen und undemokratischen Definiton der Java-Plattform zu entkr¨aften. Mit- glieder k¨onnen Personen und Firmen werden, die dann bei der Entwicklung 2.3 Neuerungen in JavaServer Faces 2.0 11 und Fortschreibung von Java-Specification-Requests (JSR) mitarbeiten k¨on- nen. Ein Java-Specification-Request ist eine Spezifikation fu¨r einen Teil der Java-Plattform. Im Augenblick sind mehrere Hundert Personen und Firmen Mitglieder des JCPs. Zu den Firmen geh¨oren praktisch alle großen Software- H¨auser. Im Jahr 2001 wurde der JSR-127 initiiert, der die JSF-Spezifikation zum In- halthat. Neben einigen Privatpersonen waren Firmen und Organisationen wie die Apache Software Foundation, BEA Systems, Borland, Fujitsu, Hewlett- Packard, IBM, ILOG, IONA Technologies, Macromedia, Novell, Oracle, Sie- mens und Sun beteiligt, um einige zu nennen. Diese breite Unterstu¨tzung macht klar, welchen Stellenwert JavaServer Faces haben. Im M¨arz 2004 wurde das final Release der JSF-Spezifikation 1.0 ver¨offentlicht. Die Java-2-Enterprise-Edition, die unter anderem Servlets, JavaServer Pages und Enterprise-JavaBeans umfasst, wurde in der Version 1.4 im November 2003, also vor der JSF-Spezifikation, ver¨offentlicht. Sie konnte JavaServer Fa- ces daher nicht enthalten. Die Version 1.5 (nach neuer Sprach- und Z¨ahlweise Java-EE 5) wurde im Mai 2006 freigegeben. Die Java-EE-Spezifikation um- fasst JavaServer Faces in der Version 1.2. Dies bedeutet, dass alle Hersteller von Java-EE-Application-Servern JavaServer Faces unterstu¨tzen mu¨ssen, um spezifikationskonformzusein.Esistunzweifelhaft,dassdieseinweitererSchub fu¨r die Verbreitung von JavaServer Faces war. Im Dezember 2009 wurde Java- EE 6 ver¨offentlicht, in der JSF 2.0 enthalten ist. 2.3 Neuerungen in JavaServer Faces 2.0 Der Sprung in der Versionsnummer von JSF 2.0 ist durch eine große Zahl von Neuerungen, Erweiterungen und A¨nderungen begru¨ndet. Zu den grundlegen- den Themenbereichen dieser Art geh¨ort sicher die Festlegung auf Facelets als Standardseitenbeschreibungssprache und die Integration von Ajax, d.h. die M¨oglichkeit, u¨ber ein definiertes JavaScript-API Teilbereiche einer Seite zu aktualisieren und eine erh¨ohte Benutzerinteraktivit¨at zu erm¨oglichen. Viele andere Neuerungen, Erweiterungen und A¨nderungen, die wir aufz¨ahlen ohne eine Gewichtung vornehmen zu wollen, flossen ebenfalls ein: Die M¨oglichkeit derVerwendungvonAnnotationen statteinerXML-Konfiguration;dieMittei- lungu¨berbestimmteJSF-Laufzeit-EreignissedurchSystem-Events;eineeinfa- che M¨oglichkeit zur Definition zusammengesetzter Komponenten (Composite Components);erweiterteM¨oglichhkeitenzurValidierung,unteranderemdurch die eigenst¨andige Spezifikation Bean-Validation; eine Steigerung der Effizienz
Description: