Java - Fachbereich Informatik Hochschule Darmstadt

Werbung
8. Java Server Faces
Grundlagen der
Programmierung II (Java)
Prof. Dr. Bernhard Humm
Hochschule Darmstadt – University of Applied Sciences
Sommersemester 2006
Übersicht Grundlagen der Programmierung II
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, …)
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 2
Agenda
Agenda
JSF: User
User Interfaces
Interfacesfür
fürWeb-Anwendungen
Web-Anwendungen
JSF von Außen
JSF im Einsatz: Ein Beispiel
Fazit und Referenzen
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006.
23.5.2006
Seite 3
JSF: User Interfaces für Web-Anwendungen
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 GUIKomponenten, Support für Dialogsteuerung, Internationalisierung, ...
Derzeit exisitiert ein ganzer Zoo von UI-Frameworks für WebAnwendungen 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
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 4
JSF: User Interfaces für Web-Anwendungen
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!
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 5
JSF: User Interfaces für Web-Anwendungen
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
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.
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 6
Agenda
Agenda
JSF: User Interfaces für Web-Anwendungen
JSF von
von Außen
Außen
JSF im Einsatz: Ein Beispiel
Fazit und Referenzen
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006.
23.5.2006
Seite 7
JSF von Außen
Der Technologiestack von JSF
JSF (Java Server Faces): Standard
Web UI Technologie nach MVC
JSF basierte Applikation
Taglib: Bibliothek für JSP-Tags zur
Minimierung des Java-Codes in JSPs
JSF Taglibs
JSP (Java Server Pages): Java-Code
in HTML-Seiten eingebettet
JSP API
JSF API
Servlet API
Servlet: Klassenbibliothek zum
Empfangen von HTTP-Requests und
Generieren von HTML-Seiten
HTML (Hypertext Markup Language):
Darstellung von Web-Inhalten
HTML
XML
Java
XML (Extensible Markup Language):
Metasprache zur Definition von
Auszeichungssprachen
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 8
JSF von Außen
Ein Komponentenmodell für User Interfaces
JSF besteht aus drei wesentlichen Bestandteilen
Die JSF-Komponenten
Browser
– serverseitig implementierte UIKomponenten
– unterstützt durch Event-Listener,
Validatoren und Konverter
WebContainer
Access page
Page
HTTPRequest
Return Content
HTTP Response
UI
Component
Die JSF-Taglibs
– zur Abbildung der Komponenten in eine
Scripting-Sprache (Java Server Pages)
JSF basierte Applikation
JSF Taglibs
Das Eventmodell und der definierte JSFView-Lebenszyklus
JSP API
JSF API
Servlet API
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 9
JSF von Außen
MVC fürs Web
WebContainer
Access page
HTTPRequest
Page
Browser
Return Content
HTTP Response
UICom
ponent
Application
Infrastructure
JSF basiert (natürlich) auf dem MVC-Pattern...
Renderer
View
Controller
Listeners
UI
Components
Navigation
Validators
Converters
Render
Kit
Also:
Saubere Trennung
zwischen Zustand,
Verhalten und Darstellung
Model
JSF Taglib
Page
(JSP)
Backing
Java
Beans
<h:commandButton
id="submit"
action="success“
value="Submit" />
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 10
JSF von Außen
Plug&Play
...und so gut wie alles an JSF ist pluggable, erweiterbar und konfigurierbar
Application
Infrastructure
Infrastrukturklassen (Application etc.)
Renderer, Renderkits
UI-Komponenten
Konverter und Validatoren
Render
Kit
UI
Components
Listeners
Validators
Listener
Converters
Navigation
Resourcen
Aber:
Das macht es natürlich auch
komplex (siehe Swing)
Resource
Bundle
Navigation
Handler
faces-config.xml
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 11
JSF von Außen
UI-Komponenten
UICommand
UIComponent
UIViewRoot
UIPanel
UINaming
Container
UIForm
UIComponentBase
UISelect
Items
UIOutput
UIInput
UISelect
Boolean
UISelect
One
UIData
UISelect
Many
UIPara
meter
UISelect
Item
UIColumn
UIMessages
UIGraphic
UIMessage
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 12
JSF von Außen
UI-Komponenten
UICommand
Represents a control that fires actions when activated.
UIViewRoot
UIPanel
UINamingContainer
UIForm
Represents the root of the component tree.
Manages the layout of its child components.
Container für die strukturierte Benennung von Kindkomponenten
Group of controls that submit data to the application. Analogous to <form> tag in HTML.
UIOutput
UIInput
UISelectBoolean
UISelectOne
UISelectMany
Displays data output on a page.
Takes data input from a user. This class is a subclass of UIOutput.
Set a boolean value on a control by selecting or deselecting it. Subclass of UIInput.
Select one item from a group of items. Subclass of UIInput.
Select multiple items from a group of items. Subclass of UIInput.
UISelectItem
UISelectItems
UIData
UIColumn
UIMessage
UIMessages
UIGraphic
UIParameter
Represents a single item in a set of items. Nested in UISelectOne or UISelectMany.
Represents an entire set of items. Nested in UISelectOne or UISelectMany.
Represents a tabular collection of data represented by a DataModel instance.
Represents a single column of data in a UIData component.
Displays a localized message.
Displays a set of localized messages.
Displays an image.
Represents substitution parameters.
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 13
JSF von Außen
Entwicklungsprozess
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
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 14
JSF von Außen
Entwicklungsprozess
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
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 15
Agenda
Agenda
JSF: User Interfaces für Web-Anwendungen
JSF von Außen
JSF im
im Einsatz:
Einsatz:Ein
einBeispiel
Beispiel
Fazit und Referenzen
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006.
23.5.2006
Seite 16
JSF im Einsatz: ein Beispiel
Ein Beispiel: Expense Reports
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 17
JSF im Einsatz: ein Beispiel
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
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 18
JSF im Einsatz: ein Beispiel
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" />
Ein View
entspricht
einer Request-Antwort!
<br>
...
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 19
JSF im Einsatz: ein Beispiel
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>
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 20
JSF im Einsatz: ein Beispiel
Navigation (Controller)
Die Dialogsteuerung ist über ein
Automatenmodell im ApplicationsKonfigurationsfile konfigurierbar
Der Navigation Handler ermittelt
über die von den ActionListenern
gelieferten Tags den Folgedialog
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 21
JSF im Einsatz: ein Beispiel
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>
<h:commandLink id="preferences"
action ="#{userHandler.editProfile}"
value="Preferences" />
<h:commandButton
id="updateProfile"
action="#{userHandler.updateProfile}"
value="UpdateProfile" />
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 22
JSF im Einsatz: ein Beispiel
Zugriff auf Anwendungslogik (Model): Backing Beans
<h:dataTable value="#{reportHandler.sortedReportsModel}" ... ...>
public class ReportHandler {
...
Backing Beans dienen als Adapter
zwischen JSF und der
Anwendungslogik
private DataModel reportsModel;
public DataModel getSortedReportsModel() {
if (reportsModel == null) {
reportsModel = new ListDataModel();
}
List reports = getReports();
Sind aber nur sauberes Design,
kein Bestandteil der Spezifikation
JSF-DataModel-Klasse zur
Unterstützung für Tabellen wrappt
Arrays, Listen und SQL-Resultsets
sortReports(reports);
reportsModel.setWrappedData(reports);
return reportsModel;
}
...
}
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 23
JSF im Einsatz: ein Beispiel
Zugriff auf Anwendungslogik (Model): BeansDeklarationen
<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
Deklaration verwendeter
Java-Beans
Lebensdauer bzw.
Sichtbarkeit über Scope
(Request, Session,
Application)
Vorbelegung der BeanProperties mit DefaultWerten
Durch Schachtelung
können komplette BeanStrukturen deklarativ
aufgebaut werden
</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 24
Agenda
Agenda
JSF: User Interfaces für Web-Anwendungen
JSF von Außen
JSF im Einsatz: Ein Beispiel
Fazit und
undReferenzen
Referenzen
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006.
23.5.2006
Seite 25
Fazit und Referenzen
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 Referenzimplementierung
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
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 26
Fazit und Referenzen
Alternative Implementierungen
ECruiser: Implementierung des 1.0-Standards mit erweiterter
Komponentenbiliothek
The Keel Meta-Framework: Integrationsframework für mehrere OpenSource Projekte (Avalon, Cocoon, Struts, JBoss, Turbine, ...) und seit
neuestem auch JSF
MyFaces: Erste Open-Source Vollimplementierung des Standars,
ebenfalls mit erweiterter Komponentenbibliothek mit FancyKomponenten (Kalender, Tabbed Pane, ...)
smile: „Componente only approach“, Open-Source
Implementierung
4
mit eigener Designer-Anwendung aber ohne JSP-Tags
Resourcen:
http://www.jsfcentral.com/products
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 27
Fazit und Referenzen
Komponenten
jsfcomp: Komponentenbibliothek für E-Business-Anwendungen
WebGalileo Faces Components: Komponentenbibliothek mit SwingLike Komponenten (TabbedPanel, Toolbar, Menu, Tree, Table)
WebTree, WebMenu, WebGrid : Luxus-Komponenten für Bäume,
Menüs und Tabellenverarbeitung
Resourcen:
http://www.jsfcentral.com/products
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 28
Fazit und Referenzen
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
Resourcen: http://www.jsfcentral.com/products
http://www.jamesholmes.com
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 29
Fazit und Referenzen
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
Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 23.5.2006, Seite 30
Herunterladen