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.

↑ Inhaltsverzeichnis



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.

↑ Inhaltsverzeichnis



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.

↑ Inhaltsverzeichnis



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!

↑ Inhaltsverzeichnis



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>

 

↑ Inhaltsverzeichnis



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.

↑ Inhaltsverzeichnis



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"/>

 

↑ Inhaltsverzeichnis



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']}

 

↑ Inhaltsverzeichnis



Links

» Verfügbare Kollektoren und Parameter in OpenCms

↑ Inhaltsverzeichnis