8. Java Server Faces Grundlagen der Programmierung II (Java) · JSF: User Interfaces für...
Transcript of 8. Java Server Faces Grundlagen der Programmierung II (Java) · JSF: User Interfaces für...
8. Java Server Faces
Prof. Dr. Bernhard HummHochschule Darmstadt – University of Applied SciencesSommersemester 2006
Grundlagen der Programmierung II (Java)
Seite 2Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
Einordnung in den Kontext der Vorlesung
Anwendungsentwicklung (Referenzarchitektur, Softwarekategorien)
Anwendungs-Komponenten (Anwendungskern)
Datenbankzugriff
Graphische Benutzeroberflächen (Swing, JSF)
Client- / Serverkommunikation (RMI)
Berechtigungsverwaltung
Application Server (EJB)
Erweiterte Konzepte (Reflection, Threads, Design Patterns, …)
Übersicht Grundlagen der Programmierung II
JSF: User Interfaces für Web-Anwendungen
JSF von Außen
JSF im Einsatz: Ein Beispiel
Fazit und Referenzen
Seite 3Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006. 23.5.2006
� JSF: User Interfaces für Web-Anwendungen
Agenda
Agenda
Seite 4Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
User Interfaces für Web-Anwendungen
Was fast jeder Java-Web-Entwickler sich wünscht, ist ein UI-Framework
mit dem Komfort und den Gestaltungsmöglichkeiten von Swing
� Genauer: Smart Client ohne Scripting-Chaos, dafür aber mit GUI-
Komponenten, Support für Dialogsteuerung, Internationalisierung, ...
� Derzeit exisitiert ein ganzer Zoo von UI-Frameworks für Web-
Anwendungen auf dem Markt (WingS, XUL, Tapestry, ...)
� Jedes dieser Frameworks funktioniert anders, alle erzeugen aber
irgendwann mal HTML (oder eine andere Markup-Sprache)
� Einige davon bringen (meist proprietäre) Tool-Unterstützung mit
JSF: User Interfaces für Web-Anwendungen
Seite 5Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
User Interfaces für Web-Anwendungen
Was man sich also zusätzlich wünscht, ist ein Standard, der
� eine saubere Basis-Architektur hat
� für einfache Anwendungen einfach benutzbar ist
� mit vorhandenen Web-Frameworks interagiert und integriert
� eine solide Basis für Tool-Unterstützung liefert und...
� sich durchsetzt!
JSF: User Interfaces für Web-Anwendungen
Seite 6Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
User Interfaces für Web-Anwendungen
Nachdem Microsoft es mit den .NET-WebForms vorgemacht hat,
hat Sun das Problem auch endlich erkannt und JSF geschaffen
� Im September 2002 wurde der Java Specification Request (JSR) 127
in den Java Community Process (JCP) eingebracht
� Im März 2004 wurde der Final Release der Spezifikation von JSF 1.0
veröffentlicht
� Die Referenzimplementierung ist bereits in J2EE 1.4 integriert
� Alternative Implementierungen sind bereits im Gange
JSF: User Interfaces für Web-Anwendungen
Achtung: JSF ist ein UI-Framework für Web-Anwendungen.
Es erhebt nicht den Anspruch ein Applikations-Framework zu sein.
Kann aber konzeptionell mit Applikations-Frameworks integriert werden.
JSF: User Interfaces für Web-Anwendungen
JSF von Außen
JSF im Einsatz: Ein Beispiel
Fazit und Referenzen
Seite 7Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006. 23.5.2006
� JSF von Außen
Agenda
Agenda
Seite 8Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
Der Technologiestack von JSF
� JSF (Java Server Faces): Standard
Web UI Technologie nach MVC
� Taglib: Bibliothek für JSP-Tags zur
Minimierung des Java-Codes in JSPs
� JSP (Java Server Pages): Java-Code
in HTML-Seiten eingebettet
� Servlet: Klassenbibliothek zum
Empfangen von HTTP-Requests und
Generieren von HTML-Seiten
� HTML (Hypertext Markup Language):
Darstellung von Web-Inhalten
� XML (Extensible Markup Language):
Metasprache zur Definition von
Auszeichungssprachen
Servlet API
JSP API JSF API
JSF Taglibs
JSF basierte Applikation
HTML XML Java
JSF von Außen
Seite 9Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
Ein Komponentenmodell für User Interfaces
JSF besteht aus drei wesentlichen Bestandteilen
� Die JSF-Komponenten
– serverseitig implementierte UI-
Komponenten
– unterstützt durch Event-Listener,
Validatoren und Konverter
� Die JSF-Taglibs
– zur Abbildung der Komponenten in eine
Scripting-Sprache (Java Server Pages)
� Das Eventmodell und der definierte JSF-
View-Lebenszyklus
JSF von Außen
Browser
WebContainer
Page
UIComponent
Access page
HTTPRequest
Return Content
HTTP Response
Servlet API
JSP API JSF API
JSF Taglibs
JSF basierte Applikation
Seite 10Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
MVC fürs Web
JSF von Außen
JSF basiert (natürlich) auf dem MVC-Pattern...
BackingJavaBeans
UI Components
Converters
Page(JSP)
<h:commandButton
id="submit"
action="success“
value="Submit" />
Validators
Listeners
Model View Controller
Also:
Saubere Trennung
zwischen Zustand,
Verhalten und Darstellung
Application
Infrastructure
RenderKit
JSF Taglib
Navigation
Renderer
Browser
WebContainer
Page
UIComponent
Access page
HTTPRequest
Return Content
HTTP Response
Seite 11Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
Plug&Play
JSF von Außen
...und so gut wie alles an JSF ist pluggable, erweiterbar und konfigurierbar
UI Components
Converters
Validators
Listeners
ApplicationInfrastructure
RenderKit
Navigation Handler
� Infrastrukturklassen (Application etc.)
� Renderer, Renderkits
� UI-Komponenten
� Konverter und Validatoren
� Listener
� Navigation
� Resourcen
Aber:
Das macht es natürlich auch
komplex (siehe Swing) faces-config.xml
ResourceBundle
Seite 12Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
UI-Komponenten
JSF von Außen
UIComponent
UIComponentBase
UIGraphic
UICommand
UIOutput
UINamingContainer
UIForm
UISelectItem
UISelectItems
UIPanel
UIInput
UISelectBoolean
UISelectOne
UISelectMany UIPara
meter
UIData
UIMessage
UIColumn
UIViewRoot
UIMessages
Seite 13Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
UI-Komponenten
JSF von Außen
UICommand Represents a control that fires actions when activated.
UIViewRoot Represents the root of the component tree.
UIPanel Manages the layout of its child components.
UINamingContainer Container für die strukturierte Benennung von Kindkomponenten
UIForm Group of controls that submit data to the application. Analogous to <form> tag in HTML.
UIOutput Displays data output on a page.
UIInput Takes data input from a user. This class is a subclass of UIOutput.
UISelectBoolean Set a boolean value on a control by selecting or deselecting it. Subclass of UIInput.
UISelectOne Select one item from a group of items. Subclass of UIInput.
UISelectMany Select multiple items from a group of items. Subclass of UIInput.
UISelectItem Represents a single item in a set of items. Nested in UISelectOne or UISelectMany.
UISelectItems Represents an entire set of items. Nested in UISelectOne or UISelectMany.
UIData Represents a tabular collection of data represented by a DataModel instance.
UIColumn Represents a single column of data in a UIData component.
UIMessage Displays a localized message.
UIMessages Displays a set of localized messages.
UIGraphic Displays an image.
UIParameter Represents substitution parameters.
Seite 14Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
Entwicklungsprozess
JSF von Außen
Für eine einfache JSF-Anwendung ergeben sich folgende
Entwicklungsschritte:
� Entwicklung der Datenmodell-Schnittstelle in Form von Backing-Beans
� Deklaration der Backing-Beans im Applikations-Konfigurationsfile
� Erzeugen der Präsentations-Seiten mit Hilfe der JSF Tag-Libraries
� Definieren der Seitennavigation im Applikations-Konfigurationsfile
Seite 15Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
Entwicklungsprozess
JSF von Außen
Für komplexere JSF-Anwendungen kommen ggf. noch folgende
Entwicklungsschritte hinzu:
� Implementieren und Einbinden von eigenen Listenern für
– erweiterte (datenabhängige) Dialogsteuerung und
– umfangreichere Datenzugriffe und Verarbeitungslogik
� Implementieren eigener Validatoren und Konverter für komplexe
Datentypen
� Erweiterung bzw. Eigenentwicklung von UI-Komponenten, inclusive
dazugehöriger Tags und Renderer
JSF: User Interfaces für Web-Anwendungen
JSF von Außen
JSF im Einsatz: Ein Beispiel
Fazit und Referenzen
Seite 16Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006. 23.5.2006
� JSF im Einsatz: ein Beispiel
Agenda
Agenda
Seite 17Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
Ein Beispiel: Expense Reports
JSF im Einsatz: ein Beispiel
Seite 18Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
Ein Beispiel: ExpenseReports
� Quelle: Hans Bergsten, Java Server
Faces (O‘Reilly 2004)
� Einfache Verwaltung von
Spesenabrechnungen
� Benutzerprofile „Angestellter“ und
„Manager“ mit unterschiedlichen
Zugriffsrechten
� Erstellung und Prüfung von
Spesenabrechnungen
� Umfasst alle wesentlichen Aspekte der
Anwendungsentwicklung mit Java Server
Faces
� Deployed in Apache Tomcat 5.0
JSF im Einsatz: ein Beispiel
Seite 19Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
Dialoge (View): Basiselemente
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<f:view>
<h:form>
<h:outputText value="#{labels.reportTitleLabel}"/>
<h:inputText id="title" size="30" required="true"
value="#{reportHandler.currentReport.title}" />
<h:message for="title" />
<br>
<h:outputText value="#{labels.reportEntryLabel}"/>
<br>
<h:outputText value="#{labels.reportDateLabel}"/>
<h:inputText id="date" size="8" required="true"
value="#{entryHandler.currentEntry.date}">
<f:convertDateTime dateStyle="short" />
</h:inputText>
<h:message for="date" />
<br>
...
JSF im Einsatz: ein Beispiel
Ein Viewentspricht
einer Request-Antwort!
Seite 20Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
Dialoge (View): Basiselemente
...
<h:outputText value="#{labels.reportTypeLabel}"/>
<h:selectOneMenu id="type" required="true"
value="#{entryHandler.currentEntry.type}">
<f:selectItems
value="#{entryHandler.expenseTypeChoices}"/>
</h:selectOneMenu>
<h:message for="type" />
<br>
<h:outputText value="#{labels.reportAmountLabel}"/>
<h:inputText id="amount" size="8" required="true"
value="#{entryHandler.currentEntry.amount}">
<f:convertNumber pattern="#,##0.00" />
<f:validateDoubleRange minimum="1"/>
</h:inputText>
<h:message for="amount" />
<br>
<h:commandButton value="Add"
disabled="#{reportHandler.editDisabled}"/>
</h:form>
</f:view>
JSF im Einsatz: ein Beispiel
Seite 21Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
Navigation (Controller)
JSF im Einsatz: ein Beispiel
� Die Dialogsteuerung ist über ein
Automatenmodell im Applications-
Konfigurationsfile konfigurierbar
� Der Navigation Handler ermittelt
über die von den ActionListenern
gelieferten Tags den Folgedialog
Seite 22Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
Navigation (Controller)
<navigation-rule>
<from-view-id>/reports.jsp</from-view-id>
<navigation-case>
<from-action>
#{userHandler.editProfile}
<from-outcome>success</from-outcome>
<to-view-id>/preferences.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/preferences.jsp</from-view-id>
<navigation-case>
<from-action>
#{userHandler.updateProfile}
</from-action>
<from-outcome>success</from-outcome>
<to-view-id>/reports.jsp</to-view-id>
</navigation-case>
</navigation-rule>
JSF im Einsatz: ein Beispiel
<h:commandLink id="preferences"
action ="#{userHandler.editProfile}"
value="Preferences" />
<h:commandButton
id="updateProfile"
action="#{userHandler.updateProfile}"
value="UpdateProfile" />
Seite 23Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
Zugriff auf Anwendungslogik (Model): Backing Beans
JSF im Einsatz: ein Beispiel
<h:dataTable value="#{reportHandler.sortedReportsModel}" ... ...>
public class ReportHandler {
...
private DataModel reportsModel;
public DataModel getSortedReportsModel() {
if (reportsModel == null) {
reportsModel = new ListDataModel();
}
List reports = getReports();
sortReports(reports);
reportsModel.setWrappedData(reports);
return reportsModel;
}
...
}
� Backing Beans dienen als Adapter
zwischen JSF und der
Anwendungslogik
� Sind aber nur sauberes Design,
kein Bestandteil der Spezifikation
� JSF-DataModel-Klasse zur
Unterstützung für Tabellen wrappt
Arrays, Listen und SQL-Resultsets
Seite 24Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
Zugriff auf Anwendungslogik (Model): Beans-Deklarationen
<managed-bean>
<managed-bean-name>reportHandler</managed-bean-name>
<managed-bean-class>
com.mycompany.expense.ReportHandler
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>reportRegistry</property-name>
<value>#{reportRegistry}</value>
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>reportRegistry</managed-bean-name>
<managed-bean-class>
com.mycompany.expense.FileReportRegistry
</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
JSF im Einsatz: ein Beispiel
� Deklaration verwendeter
Java-Beans
� Lebensdauer bzw.
Sichtbarkeit über Scope
(Request, Session,
Application)
� Vorbelegung der Bean-
Properties mit Default-
Werten
� Durch Schachtelung
können komplette Bean-
Strukturen deklarativ
aufgebaut werden
JSF: User Interfaces für Web-Anwendungen
JSF von Außen
JSF im Einsatz: Ein Beispiel
Fazit und Referenzen
Seite 25Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006. 23.5.2006
� Fazit und Referenzen
Agenda
Agenda
Seite 26Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
Fazit
� JSF ist analog Swing sehr komplex und erfordert intensive Einarbeitung
� Das Programmiermodell von Swing wurde aber nicht 100% adaptiert
� JSF wir häufig falsch wahrgenommen, nämlich als Allheilmittel und Garantie für hochwertige Web-Anwendungen
� JSF ist ein UI-Framework, kein Application-Framework, diesem Anspruch wird es gerecht
� JSF hat eine saubere Architektur und eine brauchbare Referenz-implementierung
� JSF ist integrativ und sollte sich relativ einfach in andere Frameworks einfügen
� JSF ist sehr flexibel, da so gut wie alles pluggable oder konfigurierbar ist
� JSF ist auf dem Weg, als Standard akzeptiert zu werden
Fazit und Referenzen
Seite 27Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
Alternative Implementierungen
� ECruiser: Implementierung des 1.0-Standards mit erweiterter
Komponentenbiliothek
� The Keel Meta-Framework: Integrationsframework für mehrere Open-
Source Projekte (Avalon, Cocoon, Struts, JBoss, Turbine, ...) und seit
neuestem auch JSF
� MyFaces: Erste Open-Source Vollimplementierung des Standars,
ebenfalls mit erweiterter Komponentenbibliothek mit Fancy-
Komponenten (Kalender, Tabbed Pane, ...)
� smile: „Componente only approach“, Open-Source Implementierung
mit eigener Designer-Anwendung aber ohne JSP-Tags
Fazit und Referenzen
Resourcen: http://www.jsfcentral.com/products
4
Seite 28Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
Komponenten
� jsfcomp: Komponentenbibliothek für E-Business-Anwendungen
� WebGalileo Faces Components: Komponentenbibliothek mit Swing-
Like Komponenten (TabbedPanel, Toolbar, Menu, Tree, Table)
� WebTree, WebMenu, WebGrid : Luxus-Komponenten für Bäume,
Menüs und Tabellenverarbeitung
Fazit und Referenzen
Resourcen: http://www.jsfcentral.com/products
Seite 29Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
Entwicklungsunterstützung durch Tools
Integrated Development Environents
� Eclipse based: Eclipse Web Tools JSF, MyEclipse, Exadel JSFStudio,
� IBM WebSphere Studio Application Developer
� Sun Java Studio Creator
� Oracle JDeveloper
IDE-Plugins
� Fast alle IDEs: Java Server Faces Console
� NetBeans/Sun One Studio: Kobrix WebFaces
Fazit und Referenzen
Resourcen: http://www.jsfcentral.com/products
http://www.jamesholmes.com
Seite 30Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006,
Quellen und Literatur
Literatur und Artikel
� Hans Bergsten: Java Server Faces, Building web-based user interfaces (O‘Reilly 2004)
� Sun Microsystems, The J2EE 1.4 Tutorial (http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html)
� Sun Microsystems, Introducing JSF Technology
(http://java.sun.com/developer/EJTechTips/2004/tt0324.html#2 )
� Sun Microsystems, Java Server Faces Specification, Final Release 1.0
(http://jcp.org/aboutJava/communityprocess/final/jsr127/)
� Kai Zaunick: Gut zu Gesicht, Java Server Faces (Java Spektrum 1/2004)
(http://www.sigs.de/publications/js/2004/01/zaunick_JS_01_04.pdf)
� Hans Bergsten: Improving JSF by dumping JSP
(http://www.onjava.com/pub/a/onjava/2004/06/09/jsf.html)
Resourcen
� Sun Developer Network: http://java.sun.com/j2ee/javaserverfaces/
� Sun Java Server Faces Forum: http://forum.java.sun.com/forum.jsp?forum=427
� JSFCentral: http://www.jsfcentral.com/products
� James Holmes: http://www.jamesholmes.com
Fazit und Referenzen