Facelets

Facelets
Basisdaten

Entwickler java.net
Aktuelle Version 1.1.15
(24. November 2009)
Betriebssystem plattformübergreifend
Programmiersprache Java
Kategorie Webframework, Java
Lizenz Apache-Lizenz
facelets.java.net

Facelets ist ein freies Template-System und die Standardtechnik JavaServer Faces (JSF). Es ersetzt JavaServer Pages für die Definition der Views. Facelets setzt als Eingabe gültige XML-Dokumente voraus. Deshalb werden die Seiten im XHTML-Format erstellt.

Ein wichtiges Merkmal von Facelets ist das sogenannte component-aliasing. Damit ist es möglich, statt der Tags für die UI-Komponenten normale HTML-Tags, wie zum Beispiel <input> zu nutzen. Die Verbindung zu der UI-Komponente wird über das alias-Attribut jsfc im Tag hergestellt. Die entsprechende Komponente wird beim Kompilieren der Seite durch Facelets eingefügt. Der Vorteil des component-aliasing ist, dass Webdesigner die Seite mit herkömmlichen HTML-Editoren bearbeiten können, da die normalen HTML-Tags benutzt werden. Die zusätzlichen Attribute für JSF stören dabei nicht.

Facelets bietet vielfältige Möglichkeiten, Vorlagenfragmente zu einer Gesamtseite zusammenzusetzen – zum Beispiel, um auf jeder Seite eine einheitliche Kopfzeile zu realisieren. Ein weiterer Vorteil von Facelets gegenüber JavaServer Pages ist, dass Ausdrücke in der Expression Language im Seitenquelltext außerhalb von Tags platziert werden können.

Die Abhängigkeit von XHTML kann sich u. U. auch als Nachteil darstellen. Bei Nutzung von Facelets muss man sich bewusst sein, dass die ursprüngliche Markup-Unabhängigkeit von JSF verloren geht und alternative Renderer der JSF-Komponenten (Telnet etc.) im Zusammenhang mit Facelets nicht mehr verwendet werden können.

Das Facelets-Projekt ist freie Software unter der Apache-Lizenz. Projektleiter sind Jacob Hookom und Roger Kitain, die im Java Specification Request 252[1] an der Version 1.2 der JavaServer-Faces-Spezifikation beteiligt waren.

Im Rahmen der Entwicklung der JavaServer-Faces-Spezifikation Version 2.0 im Java Specification Request 314[2] wurde Facelets in die Standardspezifikation als bevorzugte VDL (View Declaration Language) integriert.

Beispiel

Das folgende Beispiel zeigt eine XHTML-Vorlage für Facelets unter der Nutzung von component-aliasing. Das jsfc Attribut dient dabei dazu, die Tags beim Kompilieren der Seite durch die entsprechenden JavaServer-Faces-Komponenten zu ersetzen. Es wird ein Formular mit einem Texteingabefeld und einem Button zum Absenden des Formulars erzeugt. Zudem werden eingeloggte Benutzer begrüßt (zur Demonstration der Unified Expression Language).

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html">
 <body>
  <form jsfc="h:form">
   <span jsfc="h:outputText" value="Willkommen #{loggedInUser.name}" disabled="#{empty loggedInUser}" />
   <input type="text" jsfc="h:inputText" value="#{bean.property}" />
   <input type="submit" jsfc="h:commandButton" value="OK" action="#{bean.doSomething}" />
  </form>
 </body>
</html>

Der obige Code kann in einem Browser angeschaut und mit einem HTML Designer manipuliert werden. Mit klassischen JSF Seiten ist das nicht möglich, der Browser würde die JSF Elemente wie z. B. h:outputText nicht darstellen können:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html">
 <body>
  <h:form>
   <h:outputText value="Willkommen #{loggedInUser.name}" disabled="#{empty loggedInUser}" />
   <h:inputText value="#{bean.property}" />
   <h:commandButton value="OK" action="#{bean.doSomething}" />
  </h:form>
 </body>
</html>

Weblinks

Einzelnachweise

  1. Java Specification Request 252
  2. Java Specification Request 314