JavaServer Faces
Urs Frei
Inhalt
JSF Funktionsweise
Rückblick JSP
Bestandteile von JSF
So einfach ist die Anwendung
(Beispiel)
Eclipse im Einsatz
(Entwicklungsumgebung)
Apache MyFaces
Was ist JSF
Ein Framework für die Entwicklung von
Benutzerschnittstellen in Java-WebApplikationen
Baut auf JSP auf
JSF
JSP
Sun Spezifikation
Erinnerungen an JSP
Nicht selten viel Java Code in der JSP
Mühsamer Zugriff auf Javaobjekte
Kommunikation mit Server nicht
einfach
Bsp. JSP
<%@ page language="java" %>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<%fhsg.uebung8.AddressBean bean =
(fhsg.uebung8.AddressBean)request.getAttribute("addressBean");
%>
<html><head><title>Übung 8 - Adressverwaltung</title></head>
<body bgcolor="#FFFFFF"><form>
<h1>Adresse anzeigen:</h1>
<p> Vorname:<%=bean.getFirstName() %></br>
Nachname:<%=bean.getLastName() %></br>
Adresse:<%=bean.getAddress() %></br>
PLZ:<%=bean.getZip() %></br>
Ort:<%=bean.getCity() %></br>
Telefon:<%=bean.getPhone() %></br>
E-Mail:<%=bean.getEmail() %></br>
<a href="controller?action=showlist">zurück</a>
</form></body></html>
</p>
JSF soll Arbeitserleichterung
für Entwickler bieten, in:
Komponenten
Datentransfer
Konverter
Validierung
Zustandsspeicherung
Web Applikation wird zusammengebaut
Möglich eigene Komponenten bauen
Speicherung Applikationszustand
Ereignisbehandlung
Server kann Clientereignisse behandeln
Bestandteile für JSF
web.xml
JSF Files
faces-config.xml
Java Klassen in der Java Bean Form
Expression Language (EL)
JSF File
Ist ein *.jsp mit taglib
Was sind taglib?
Ermöglicht die Definition eigener Tags
Verwendung:
„import“ Definition
Verwenden wie die üblichen Tags
Beispiel taglib Verwendung
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
<head>
<title>Gespeichert</title>
</head>
<body>
<f:view>
<h:form>
<h:outputLabel>Die Daten sind gespeichert:</h:outputLabel>
<br>
</h:form>
</f:view>
</body>
</html>
faces-config.xml
Managed-Beans
Navigationsregeln
Wie sollen sich die Komponenten zeichnen
Validatoren
Welche Seite folgt auf welche Seite
Renderer
Zugriff auf die Daten im Modell
Welche Eingabe vom User ist gültig
Konverter
Wie sollen die Eingabedaten konvertiert werden
Managed-Beans (facesconfig.xml)
Klassen, die nach den Konventionen
von Java Bean erstellt wurden
Member mit set und get
Werden im faces-config.xml definiert
Sehr einfacher Zugriff vom JSP
Expression Language (EL)
Ermöglicht den Zugriff auf die
Managed-Beans aus dem JSP
Aufbau:
„#{managedBeanName.MemberName}“
Voraussetzungen für JSF
Entwicklungsumgebung Eclipse
WTP (Eclipse Project) für JSF 1.2 neuste
Version nötig (I20070313)
Exadel Studio, Plugin für Eclipse (vom hören
sagen)
Java EE 5 mit Sun Application Server PE 9
Tomcat 5.5 keine Unterstützung, da alte
JSP Version
So einfach ist die Umsetzung!!
Beispiel „Anwendung“:
ValueChangedListener
Validator
Datumskonverter
Tabellenerzeugung
Statische Navigation
Dynamische Navigation
Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>
javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
</web-app>
Input.jsp
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>…
<body><f:view>
<h3>Bitte Name und Vorname eingeben</h3>
<br>
…
Vorname:
<h:inputText value="#{person.firstName}"/>
<br>
<h:commandButton value="Zeigen" action="show"/>
…
</html>
Managed-Bean (facesconfig.xml)
<managed-bean>
<managed-bean-name>person
</managed-bean-name>
<managed-bean-class>
ch.naturasoft.jsf.address.model.Person
</managed-bean-class>
<managed-bean-scope>session
</managed-bean-scope>
</managed-bean>
Navigationsregeln
Zwei Arten
Dynamisch Navigation
Statisch Navigation
Dynamische Navigation
JSP (Input.jsp)
Managed-Bean (java)
<h:commandButton value="Speichern"
action="#{saver.saveData}"/>
public String saveData(){
return "ok";}
faces-config.xml
<navigation-rule>
<from-view-id>/Input.jsp</from-view-id>
<navigation-case>
<from-outcome>ok</from-outcome>
<to-view-id>/Saved.jsp</to-view-id>
</navigation-case>
</navigation-rule>
Statische Navigation
JSP (Input.jsp)
<h:commandButton value="Zeigen"
action="show"/>
faces-config.xml
<navigation-rule>
<from-view-id>/Input.jsp</from-view-id>
<navigation-case>
<from-outcome>show
</from-outcome>
<to-view-id>/Show.jsp</to-view-id>
</navigation-case>
</navigation-rule>
ValueChangedListener
JSP (Input.jsp)
<h:inputText value="#{person.lastName}">
<f:valueChangeListener
type="ch...NameValueChangedLis"/>
</h:inputText>
Java
public class NameValueChangedLis implements ValueChangeListener
{
public void processValueChange(ValueChangeEvent arg0)throws
AbortProcessingException {
…
}
}
Validator
JSP (Input.jsp)
<h:inputText value="#{person.birthday}">
<f:validator binding="#{dateValidator}"/>
</h:inputText>
Java
public class DateValidator implements Validator {
public void validate(FacesContext f, UIComponent ui, Object o)throws
ValidatorException {
…
faces-config.xml
<managed-bean>
<managed-bean-name>dateValidator</managed-bean-name>
<managed-bean-class>
ch...DateValidator</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
Konverter
Vorgefertigter Konverter für Datum
JSP (Input.jsp)
<h:inputText value="#{person.birthday}">
<f:convertDateTime/>
</h:inputText>
Erzeugung eigener Konverter möglich
Tabellenerzeugung
JSP (List.jsp)
<h:dataTable var="tmpPerson" value="#{model.persons}" border="1">
<h:column>
<f:facet name="header">
<h:outputText value="Vorname"/>
</f:facet>
<h:outputText value="#{tmpPerson.firstName}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Nachname"/>
</f:facet>
<h:outputText value="#{tmpPerson.lastName}"/>
</h:column>
</h:dataTable>
Voraussetzungen: alle Manages-Bean sind
registriert (config-faces.xml)
Eclipse im Einsatz
MyFaces (Apache)
Implementation des JSF Standards
Mehr Komponenten
Noch weitere Vereinfachungen
Hat div. Unterprojekte mit
verschiedenen Weiterentwicklungen
Beispielkomponenten
Beispielkomponenten
Ausblick:
Web Applikationen erstellen mit
Apache MyFaces
Ajax
Spring (Hibernate)
Ein Bsp. dazu findet Ihr im Buch
Links
Eclpse www.eclipse.org
WTP http://www.eclipse.org/webtools/
Exadel-Studio www.exadel.com/ Plugin für
Eclipse
Java EE 5 java.sun.com
Referenzen
JSF@Work ISBN3-89864-401-4
http://java.sun.com/javaee/javaserverf
aces/ JSF Spezifikation
http://www.jsf-forum.de/ mit Tutorials
http://myfaces.apache.org/ Apache
myFaces
http://www.irian.at/myfaces.jsf