JavaServer Faces

Vorstellung des Standard-Framework von Sun

Danny Falss


[ Inhalt ] ... [ Aufbau und Techniken von JSF ] ... [ Fazit ]

Eigene Erweiterungen


Eigene Komponenten

  1. Schritte bei der Erstellung eigener Komponenten
    • Komponenten Tag-Handler entwickeln:
      Verwaltet Attribute und liefert den Renderer der Komponente und den Typ
    • TagLibaryDescriptor (TLD) erstellen:
      XML Datei die die Verwendung des Tags beschreibt.
    • Komponentenklasse entwickeln:
      die Funktionalität der Komponente
    • zugehörige Renderklasse entwickeln:
      bestimmt das Aussehen der Komponente
    • Bekanntmachung in Konfigurationsdatei
    • Benutzen der TLD bzw. Komponente

    [ nach oben ]

  2. Email Validator

    Natürlich lassen sich eigene Validatoren bzw. Konverter über das Implementieren der Validator- bzw. Converter-Schnittstelle erstellen. Es ist auch möglich Validatoren direkt innerhalb einer Controller-Klasse zu schreiben, dieses widerspricht aber dem Trennungsansatz und daher sollte darauf verzichtet werden.

    Im folgenden soll anhand zur Überprüfung von Emailadressen ein Validator erstellt werden. Dazu wird eine Java-Klasse erzeugt, die das Interface Validator implementiert. Die vorgegebene Methode ist:

    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException

    Man erhält also sowohl den aktuellen Context FacesContext als auch die zu überprüfende Komponente UIComponent und den aktuellen Wert value der Komponente. Im Fehlerfall wird eine ValidatorException ausgelöst mit Angabe der Fehlernachricht FacesMessage.
    Vgl. dazu Beispiel /src/util/validator/Mail.java

    Der so erstellte Validator muss dann in die Konfiguration eingetragen werden:

    <validator>
      <validator-id>MailValidator</validator-id>
      <validator-class>
        util.validator.Mail
      </validator-class>
    </validator>
    Vgl. dazu Beispiel /Webroot/WEB-INF/tutadmin/faces-config.xml

    Und kann dann an eine Komponente angehängt werden mittels dem <f:validator/>-Tag:

    <h:inputText id="email" value="#{MemberControllerBean.currentMember.email}" required="true" maxlength="50">
      <f:validator validatorId="MailValidator"/>
    </h:inputText>
    Vgl. dazu Beispiel /Webroot/tutadmin/member_edit.jsp

    [ nach oben ]

  3. Fortschrittsanzeige

    (Quelle: Bosch, Andy – um JSF EL Funktionalität erweitert)

    Es soll eine Komponente entwickelt werden, die sowohl grafisch als auch in Worten eine Prozentangabe ausgibt. Die Komponente soll UsageBar heißen und der hinterlegte Wert soll in inuse gespeichert werden. Dabei wurde die Komponente erweitert, so dass sie auch mit Ausdrücken der JSF EL benutzt werden kann.

[ nach oben ]


PhaseListener

Bei Implementierung des PhaseListener-Interface müssen folgende drei Methoden angelegt werden:

Vgl. dazu Beispiel src/util/listener/AllPhaseListener.java

Mittels PhaseListenern ist es möglich Logging zu realisieren in dem die erwähnte PhaseId.ANY_PHASE verwendet wird (dieses macht der Beispiel PhaseListener). Ein anderes Einsatzgebiet wäre das Kontrollieren von kritischen Parametern z.B. für Adminbefehle (vor PhaseId.RESTORE_VIEW). Also eine Kontrolle, ob eine Zugriffsberechtigung wirklich vorliegt.

[ nach oben ]


angepasster Lifecycle


angepasster Lebenszyklus
Der Standard Lebenszyklus kann komplett angepasst werden. So kann der komplette Ablauf ausgetauscht werden oder nur einzelne Elemente. Innerhalb der Restore View Phase kann der StateManager zum Verwalten der Wiederherstellung und Speicherns sowie der ViewHandler zum Verwalten der Sichten angepasst werden. Dazu werden die entsprechenden Klassen beerbt. Gleiches ist möglich, wenn man das Navigationsverhalten verändern bzw. erweitern will. Hierzu kann die Klasse NavigationHandler erweitert werden. Wie schon erwähnt werden in der Render Response Phase alle Komponenten gerendert. Dazu können für einzelne Komponenten eigene Renderer erstellt werden oder für alle Komponenten komplette RendererKits angelegt werden.


[ nach oben ] ... [ zurück ] ... [ weiter ]

Valid XHTML 1.0 Strict