Ausgabe eines Template-Elements
Einleitung
Template-Elements gelten für JSP-Ausgaben für Seiten basierend bis zum Template 2.1. Ab Template 2.2 (aka "Containerpages") werden sogenannte Formatter eingesetzt.
Grundgerüst Template-Element
Laden mit der Page-Direktive und dem Attribut taglibs die möglichen Bibliotheken. Für den Zugriff auf OpenCms-Klassen benöitgen Sie auf jeden Fall die Bibliothek cms.
<%@page session="false" taglibs="c,cms,fmt" %> <fmt:setLocale value="${cms:vfs(pageContext).context.locale}" /> <fmt:bundle basename="de/stuttgart/uni/workplace"> <cms:include property="template" element="head" /> <cms:contentload collector="singleFile" param="%(opencms.uri)" editable="true"> <cms:contentaccess var="content" /> ${content.value['Knotenname']}<!-- Ausgabe von XML-Knoten --> </cms:contentload> <cms:include property="template" element="foot" /> </fmt:bundle>
Das obige Beispiel zeigt die Ausgabe einer Detailseite (jede Ressource dieses Typs hat in seiner Eigenschaft template-elements den Pfad auf diese JSP eingetragen) Der Kollektor singleFile mit seinem Parameter lädt genau die angefragte Ressource. Mit dem EL-Ausdruck ${content.value['Knotenname']} kann auf im Schema definierte Knoten zugegriffen werden. Zulässig sind auch XPATH-Ausdrücke.
Grundgerüst Formatter
<%@ page session="false" trimDirectiveWhitespaces="true" pageEncoding="UTF-8" %><%--
Taglibs auf diese Art eingebunden unterstützen (in Eclipse) Code-Completion
--%><%@ taglib prefix="cms" uri="http://www.opencms.org/taglib/cms" %><%--
--%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%--
--%><%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><%--
--%><%@ taglib prefix="str" uri="http://jakarta.apache.org/taglibs/string-1.1" %><%--
--%><%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %><%--
--%><fmt:setLocale value="${cms.locale}" /><%--
Lokalisierung aus dieser Property-Datei
--%><fmt:bundle basename="de/stuttgart/uni/workplace"><%--
--%>
<cms:formatter var="content">
<div>
<c:choose>
<c:when test="${cms.element.inMemoryOnly}">
<h1><fmt:message key="label.ArticleList.OnlyMemory" /></h1>
</c:when>
<c:otherwise>
<c:catch var="exception">
<%-- Hier kommt die Standardausgabe für diesen Typ --%>
</c:catch>
<c:if test="${exception != null}">
<span class="info">Der Inhalt kann leider nicht dargestellt werden.</span>
</c:if>
</c:otherwise>
</c:choose>
</div>
</cms:formatter>
</fmt:bundle>
Im Vergleich zu Template-Elements müssen keine Elemente des Template inkludiert werden.
Bedingte Ausgaben
Im Vergleich zur früheren Tag-Library cms gibt es per EL etwas flexiblere Ausdrücke, um z.B. nicht vorhandene oder Leerstrings mit einem Methodenaufruf prüfen zu lassen.
<c:if test="${!content.value.Bild.isEmptyOrWhitespaceOnly}"> ${content.value.Bild} </c:if>
Für eine genauere Beschreibung bitte das OpenCms-Wiki anschauen!
Schleifen über Elementknoten
Ist ein Knoten mit maxOccurs="n" (n > 1) im Schema definiert (darf also mehrfach vorkommen) kann mit dieser Anweisung über die Knotenmenge iteriert werden:
<c:if test="${content.value.Bild.exists"> <!-- Test, ob der Knoten existiert --> <c:forEach var="bild" items="${content.valueList.Bild}"/> <!--liefert die Knotenmenge aller Bilder --> ${bild.value.link} <!-- gibt den Knoten (relativ zu Bild) aus --> </c:forEach> </c:if>
Zugriff auf Eigenschaften
Anstelle des Tags <cms:property> kann nun ein EL-Ausdruck benutzt werden:
${cms:vfs(pageContext).property['/index.html']['Title']}
Liest die Eigenschaft Title von der Ressource /index.html.
Datumsausgaben
Datumsfelder lassen sich nun inkl. beliebiger Formate als Einzeiler ausgeben:
<fmt:formatDate value="${cms:convertDate(content.value.Datum)}" pattern="yyyy-MM-dd HH:mm:ss" />
Man darf auch die vordefinierten Formatvorlagen SHORT, MEDIUM, LONG oder FULL benutzen, s. Oracle-Dokumentation.
<fmt:formatDate value="${cms:convertDate(cms:vfs(pageContext).readXml[artikel].value['Datum'])}" dateStyle="SHORT" type="date"/>
Zugriff auf Knoten ohne contentload
In der Regel wird mit einem <cms:contentload> die gewünschte Ressource geladen. Per EL ist aber ebenso ein direkter Zugriff möglich:
${cms:vfs(pageContext).readXml['/artikel.html'].value['Spaltenbild[1]/Description']}
Links
» Verfügbare Kollektoren und Parameter in OpenCms