JavaJEEJSF: Difference between revisions

From Wiki RB4
Line 38: Line 38:
===Configuration Files===
===Configuration Files===
====web.xml====
====web.xml====
add the following entries
* add the following entries
  <servlet>
  <servlet>
   <display-name>FacesServlet</display-name>
   <display-name>FacesServlet</display-name>

Revision as of 12:01, 29 August 2008

Introduction

Most importantly JavaServer Faces technology provides a rich architecture for:

  • model-view-controller architecture
  • managing component state
  • processing component data,
  • validating and convert user input
  • support for internationalizing
  • handling events.

Nach einer fast dreijährigen Spezifikationsphase und etlichen damit verbundenen Diskussionen hat Sun 2004 das erste offizielle Release der JSF-Spezifikation (Java Server Faces) veröffentlicht. You can think of JSF as "swing for server-side applications". Compared to that servlets and JSP are the assmebly language.

JSF has three parts:

  • a set of prefabricated UI components
  • an event-driven programming model
  • a component model that enables third-party developers to supply additional components

Eine dargestellte Seite heißt im JSF-Kontext View. Dieser besteht aus hierarchisch angeordneten Komponenten der Benutzerschnittstelle, etwa einfachen Eingabefeldern und Knöpfen, aber auch aufwendigeren Bausteinen wie Tabellen, Bäumen und Menüs. Diese Struktur bildet in ihrer Summe einen Baum, dessen Hierarchie den Seitenaufbau widerspiegelt. So kann eine Tabelle beispielsweise wieder Ein- oder Ausgabefelder enthalten und ein Menü eventuell Untermenüs. Für jeden Benutzer der Webanwendung speichert das Framework eine entsprechende Instanz des Komponentenbaums.

Jede Komponente kann der Programmierer mit einer ID versehen und auf diese Weise ansprechen oder suchen. Grundsätzlich kann sie einen beliebigen Zustand besitzen und diesen über Request-Grenzen hinaus speichern. Dabei ist sowohl eine Speicherung auf dem Client als auch auf dem Server möglich. Alle Komponenten sind von der abstrakten Klasse UIComponent abgeleitet, der wesentlichen Schnittstelle zum Komponentenbaum. Die Wurzel des Baums bildet eine Instanz des Typs UIViewRoot.

Fast alle Eigenschaften einer Komponente lassen sich mit „Value Bindings“ versehen, um den aktuellen Wert an einen bestimmten Speicherort zu binden. Mit Hilfe solcher Bindings können zum Beispiel Eingabefelder ihre Daten im Modell speichern und wieder daraus lesen. In der Regel speichert eine Eingabekomponente zusätzlich den übertragenen Wert lokal, um diesen unabhängig von Konvertierungen im Fehlerfall wieder anzeigen zu können. Dieses geschieht für den Entwickler einer JSF-Seite transparent, das heißt, ohne ihm zusätzlichen Aufwand zu verursachen.

Nimmt der Server einen Faces Request entgegen, verarbeitet er diesen gemäß des Request-Lebenszyklus (Request Processing Lifecycle, RPL) in sechs Phasen:

  • Restore View
  • Apply Request Values
  • Process Validations
  • Update Model Values
  • Invoke Application
  • Render Response

Java Server Faces sind ausgabeunabhängig. Wie eine Komponente auf dem Client erscheint, wie eine Anwendung ihre Parameter kodiert und dekodiert, entscheidet ein zugeordneter „Renderer“. Für die Ansteuerung der Renderer sorgt ein ViewHandler. Für HTML definiert der JSF-Standard eine JSP-Tag-Library.

Derzeit stehen zwei etablierte Implementierungen für die JSF-Spezifikation zur Verfügung. Zum einen die von Sun herausgegebene Referenzimplementierung und zum anderen die unter der Apache-2.0-Lizenz stehende JSF-Implementierung MyFaces, die eine gute Alternative zu der Sun-eigenen Variante ist.

Implementation

Libs

  • add libs jsf-api.jar, jsf-impl.jar and jstl.jar

Configuration Files

web.xml

  • add the following entries
<servlet>
  <display-name>FacesServlet</display-name>
  <servlet-name>FacesServlet</servlet-name>
  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>FacesServlet</servlet-name>
  <url-pattern>/faces/*</url-pattern>
</servlet-mapping>

faces-config.xml

  • location in <WAR-File>\WEB-INF\ directory (beside web.xml)

Applications

TestWebApplication

Sources

  • Core JavaServer Faces; David Geary & Cay Horstmann; source code in C:\Uwes\Zips\Java\JSF\corejsf2-examples.zip; http://corejsf.com