User Tools

Site Tools


java:jsf

Links

Templating/Including

(Beitrag von Thomas Siedschlag)

JSF unterstützt ein Templating-Mechanismus <ui:composition>

Das Templating kann hierarchisch erfolgen (ein Template verwendet ein anderes).

Es können aber in einer Seite mehrere Templates angesprochen werden. Dann sollte das innere Template aber mit <ui:decorate> dekoriert werden.

<ui:composition template="template.xhtml"
                xmlns="http://www.w3.org/1999/xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:t="http://tasktest.de/jsf">
    <ui:define name="title"><h:outputText value="#{msgs.task_edit}"/></ui:define>
    <ui:define name="body">
        <ui:decorate template="include/task_edit.xhtml">
            <ui:define name="task_edit_title"><h1><h:outputText value="#{msgs.task_edit}" /></h1></ui:define>
            <ui:define name="task_edit_action">
                <h:commandButton action="#{taskController.doEditTask}" value="#{msgs.save}" />
            </ui:define>
        </ui:decorate>
    </ui:define>
</ui:composition>

Daneben existiert die Möglichkeit, Snippets mit <ui:include> auch zu includieren. Beim Include können Parameter angebene werden. Das zu includierende Snippets sollte mit <ui:composition> umrahmt sein.

        <ui:include src="include/task_edit.xhtml">
            <ui:param name="task_edit_title" value="#{msgs.task_edit}"/>
            <ui:param name="edited" value="true" />
        </ui:include>

Solche Snippets können zu einer Taglib zusammengefasst werden, d. h. sie können dann über ein Tag verwendet werden.

Dazu muss eine <beliebig>.taglib.xml Datei angelegt werden, am besten unter META-INF.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE facelet-taglib PUBLIC
  "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
  "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
<facelet-taglib>
  <namespace>http://tasktest.de/jsf</namespace>
   <tag>
        <tag-name>taskEdit</tag-name>
        <source>../../../include/task_edit.xhtml</source>
   </tag>
</facelet-taglib>

Dem Tag können Attribute übergeben werden, diese stehen dem includierten Snippet als Parameterwerte zur Verfügung. Das bedeutet aber auch, dass so angegebene Tag-Attribute vom XHTML-Editor nicht erkannt werden können!

<t:taskEdit xmlns:t="http://tasktest.de/jsf" task_edit_title="Test" edited="false" />

java/jsf.txt · Last modified: 2011/01/21 22:02 by hgoebl