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