Die Tag-Bibliotheken von Granite, CQ und Sling verleihen Ihnen Zugriff auf spezifische Funktionen für die Verwendung im JSP-Skript der Vorlagen und Komponenten.
Die Tag-Bibliothek von Granite enthält hilfreiche Funktionen.
Bei der Entwicklung des JSP-Skripts einer Granite-UI-Komponente empfiehlt es sich, den folgenden Code oben im Skript einzufügen:
<%@include file="/libs/granite/ui/global.jsp"%>
Das globale Objekt deklariert zudem die Sling-Bibliothek.
<%@taglib prefix="sling" uri="https://sling.apache.org/taglibs/sling" %>
Das Tag <ui:includeClientLib>
enthält eine AEM-HTML-Client-Bibliothek, bei der es sich um eine JS-, CSS- oder Design-Bibliothek handeln kann. Wenn mehrere verschiedene Typen enthalten sind, wie etwa JS und CSS, verwenden Sie dieses Tag mehrere Male in JSP. Dieses Tag ist ein praktischer Wrapper für die Service-Schnittstelle [com.adobe.granite.ui.clientlibs.HtmlLibraryManager](https://helpx.adobe.com/experience-manager/6-4/sites/developing/using/reference-materials/javadoc/com/adobe/granite/ui/clientlibs/HtmlLibraryManager.html)
.
Es weist folgende Attribute auf:
categories: Eine durch Kommas getrennte Liste der Client-Bibliothekskategorien. Dies bezieht alle Javascript-Dateien und CSS-Bibliotheken für die betreffenden Kategorien mit ein. Der Designname wird aus der Abfrage extrahiert.
Entspricht: com.adobe.granite.ui.clientlibs.HtmlLibraryManager#writeIncludes
theme: Eine durch Kommas getrennte Liste der Client-Bibliothekskategorien. Dies beinhaltet alle designbezogenen Bibliotheken (CSS und JS) für die entsprechenden Kategorien. Der Designname wird aus der Abfrage extrahiert.
Entspricht: com.adobe.granite.ui.clientlibs.HtmlLibraryManager#writeThemeInclude
js: Eine durch Kommas getrennte Liste der Client-Bibliothekskategorien. Dies bezieht alle Javascript-Bibliotheken für die betreffenden Kategorien mit ein.
Entspricht: com.adobe.granite.ui.clientlibs.HtmlLibraryManager#writeJsInclude
css: Eine durch Kommas getrennte Liste der Client-Bibliothekskategorien. Dies bezieht alle CSS-Bibliotheken für die betreffenden Kategorien mit ein.
Entspricht: com.adobe.granite.ui.clientlibs.HtmlLibraryManager#writeCssInclude
themed: Ein Flag, das angibt, ob nur designbezogene oder nicht designbezogene Bibliotheken enthalten sein sollen. Wenn ausgelassen, sind beide Sätze enthalten. Gilt nur, wenn nur JS oder nur CSS enthalten ist (nicht wenn Kategorien oder Designs enthalten sind).
Das Tag <ui:includeClientLib>
kann in einem JSP-Code wie folgt verwendet werden:
<%-- all: js + theme (theme-js + css) --%>
<ui:includeClientLib categories="cq.wcm.edit" />
<%-- only js libs --%>
<ui:includeClientLib js="cq.collab.calendar, cq.security" />
<%-- theme only (theme-js + css) --%>
<ui:includeClientLib theme="cq.collab.calendar, cq.security" />
<%-- css only --%>
<ui:includeClientLib css="cq.collab.calendar, cq.security" />
Die Tag-Bibliothek von CQ enthält hilfreiche Funktionen.
Das Skript muss mit dem folgenden Code beginnen, damit Sie die Tag-Bibliothek von CQ im Skript verwenden können:
<%@taglib prefix="cq" uri="https://www.day.com/taglibs/cq/1.0" %>
Wenn die Datei /libs/foundation/global.jsp
im Skript enthalten ist, wird die Tag-Bibliothek automatisch deklariert.
Wenn Sie das JSP-Skript einer AEM-Komponente entwickeln, sollten Sie folgenden Code am Anfang des Skripts einfügen:
<%@include file="/libs/foundation/global.jsp"%>
Er deklariert die Tag-Bibliotheken Sling, CQ und JSTL und macht die regelmäßig genutzten Skriptobjekte verfügbar, die durch das Tag <cq:defineObjects />
definiert sind. Dies verkürzt und vereinfacht den JSP-Code der Komponente.
Bei dem Tag <cq:text>
handelt es sich um ein Hilfe-Tag, das Komponententext in JSP ausgibt.
Es weist die folgenden optionalen Attribute auf:
property: Name der zu verwendenden Eigenschaft. Der Name steht im Bezug zur aktuellen Ressource.
value: Der für die Ausgabe zu verwendende Wert. Falls dieses Attribut vorhanden ist, wird die Nutzung des Attributs „property“ außer Kraft gesetzt.
oldValue: Der für die diff-Ausgabe zu verwendende Wert. Falls dieses Attribut vorhanden ist, wird die Nutzung des Attributs „property“ außer Kraft gesetzt.
escapeXml: Definiert, ob die Zeichen <, >, &, ' und " in der daraus entstehenden Zeichenfolge in ihre entsprechenden Zeichenentitäts-Codes umgewandelt werden sollen. Der Standardwert lautet „false“. Beachten Sie, dass der Escape-Vorgang nach der optionalen Formatierung angewendet wird.
format: Optionales java.text.Format für die Formatierung des Texts.
noDiff: Unterdrückt die Berechnung einer diff-Ausgabe, auch wenn eine diff-Information vorhanden ist.
tagClass: CSS-Klassenname eines Elements, das eine nicht leere Ausgabe umgibt. Wenn leer, wird kein Element hinzugefügt.
tagName: Name des Elements, das eine nicht leere Ausgabe umgibt. Standardmäßig ist DIV eingestellt.
placeholder: Standardwert, der im Bearbeitungsmodus für null oder leeren Text verwendet wird, z. B. der Platzhalter. Beachten Sie, dass nach der optionalen Formatierung und dem Escapevorgang die standardmäßige Prüfung ausgeführt wird, d. h. er wird im vorliegenden Format in die Ausgabe geschrieben. Standardwert ist:
<div><span class="cq-text-placeholder">¶</span></div>
default: Zu verwendender Standardwert für null oder leeren Text. Beachten Sie, dass nach der optionalen Formatierung und dem Escape-Vorgang die standardmäßige Prüfung ausgeführt wird, d. h. er wird im vorliegenden Format in die Ausgabe geschrieben.
Beispiele einer möglichen Verwendung des Tags <cq:text>
in JSP:
<cq:text property="jcr:title" tagName="h2"/>
<cq:text property="jcr:description" tagName="p"/>
<cq:text value="<%= listItem.getTitle() %>" tagName="h4" placeholder="" />
<cq:text value="<%= listItem.getDescription() %>" tagName="p" placeholder=""/>
<cq:text property="jcr:title" value="<%= title %>" tagName="h3"/><%
} else if (type.equals("link")) {
%><cq:text property="jcr:title" value="<%= "\u00bb " + title %>" tagName="p" tagClass="link"/><%
} else if (type.equals("extralarge")) {
%><cq:text property="jcr:title" value="<%= title %>" tagName="h1"/><%
} else {
%><cq:text property="jcr:title" value="<%= title %>" tagName="h2"/><%
<cq:text property="jcr:description" placeholder="" tagName="small"/>
<cq:text property="tableData"
escapeXml="false"
placeholder="<img src=\"/libs/cq/ui/resources/0.gif\" class=\"cq-table-placeholder\" alt=\"\">"
/>
<cq:text property="text"/>
<cq:text property="image/jcr:description" placeholder="" tagName="small"/>
<cq:text property="text" tagClass="text"/>
Das Tag <cq:setContentBundle>
erstellt einen i18n-Lokalisierungskontext und speichert ihn in der Konfigurationsvariablen javax.servlet.jsp.jstl.fmt.localizationContext
.
Es weist folgende Attribute auf:
language: Die Sprache des Gebietsschemas, für das das Ressourcenpaket abgerufen werden soll.
source: Die Quelle, aus der das Gebietsschema übernommen werden soll. Sie können sie auf einen der folgenden Werte einstellen:
static: Das Gebietsschema wird vom Attribut language
übernommen, falls verfügbar, andernfalls vom standardmäßigen Server-Gebietsschema.
page: Das Gebietsschema wird von der Sprache der aktuellen Seite oder Ressource übernommen, falls verfügbar, andernfalls vom Attribut language
, falls verfügbar, oder andernfalls vom standardmäßigen Server-Gebietsschema.
request: Das Gebietsschema wird vom angeforderten Gebietsschema (request.getLocale()
) übernommen.
auto: Das Gebietsschema wird vom Attribut language
übernommen, falls verfügbar, andernfalls von der Sprache der aktuellen Seite oder Ressource, falls verfügbar, andernfalls von der Anfrage.
Falls das Attribut source
nicht festgelegt ist:
Falls das Attribut language
festgelegt ist, ist für das Attribut source
standardmäßig static
eingestellt.
Falls das Attribut language
nicht festgelegt ist, ist für das Attribut source
standardmäßig auto
eingestellt.
Das „Inhaltspaket“ kann einfach mit standardmäßigen JSTL-<fmt:message>
-Tags verwendet werden. Die Suche von Nachrichten anhand von Schlüsselwörtern hat zwei Aspekte:
SlingHttpServletRequest.getResourceBundle(Locale)
) geladen. Die Sprache oder das Gebietsschema für dieses Paket wird von den Sprach- und Quellattributen des Tags <cq:setContentBundle>
definiert.Das Tag <cq:setContentBundle>
kann in einem JSP-Code wie folgt verwendet werden.
Für Seiten, die ihre Sprache definieren:
... %><cq:setContentBundle source="page"/><% %>
<div class="error"><fmt:message key="Hello"/>
</div> ...
Für von Benutzern personalisierte Seiten:
... %><cq:setContentBundle scope="request"/><% %>
<div class="error"><fmt:message key="Hello"/>
</div> ...
Das Tag <cq:include>
fügt eine Ressource in die aktuelle Seite ein.
Es weist folgende Attribute auf:
flush
path
resourceType
script
ignoreComponentHierarchy
Beispiel:
<%@taglib prefix="cq" uri="https://www.day.com/taglibs/cq/1.0" %><%
%><div class="center">
<cq:include path="trail" resourceType="foundation/components/breadcrumb" />
<cq:include path="title" resourceType="foundation/components/title" />
<cq:include script="redirect.jsp"/>
<cq:include path="par" resourceType="foundation/components/parsys" />
</div>
Verwenden Sie <%@ include file="myScript.jsp" %>
oder <cq:include script="myScript.jsp" %>
, um ein Skript einzufügen?
<%@ include file="myScript.jsp" %>
informiert den JSP-Compiler, dass er eine vollständige Datei in die aktuelle Datei einfügen soll. Es ist, als ob die Inhalte der enthaltenen Datei direkt in die Originaldatei eingefügt würden.<cq:include script="myScript.jsp">
wird die Datei zur Laufzeit eingebunden.Sollten Sie <cq:include>
oder <sling:include>
verwenden?
<cq:include>
.<cq:include>
ermöglicht das direkte Einfügen von Skriptdateien anhand ihres Namens, wenn Sie das script-Attribut verwenden. Dabei werden Komponenten- und Ressourcentypvererbung berücksichtigt. Diese ist häufig einfacher als die strikte Einhaltung der Skriptauflösung von Sling mithilfe von Selektoren und Erweiterungen.<cq:includeClientLib>
ist seit AEM 5.6 veraltet. <ui:includeClientLib>
muss stattdessen verwendet werden.
Das Tag <cq:includeClientLib>
enthält eine AEM-HTML-Client-Bibliothek, bei der es sich um eine JS-, CSS- oder Design-Bibliothek handeln kann. Wenn mehrere verschiedene Typen enthalten sind, wie etwa JS und CSS, verwenden Sie dieses Tag mehrere Male in JSP. Dieses Tag ist ein praktischer Wrapper für die Service-Schnittstelle com.day.cq.widget.HtmlLibraryManager
.
Es weist folgende Attribute auf:
categories: Eine durch Kommas getrennte Liste der Client-Bibliothekskategorien. Dies bezieht alle Javascript-Dateien und CSS-Bibliotheken für die betreffenden Kategorien mit ein. Der Designname wird aus der Abfrage extrahiert.
Entspricht: com.day.cq.widget.HtmlLibraryManager#writeIncludes
theme: Eine durch Kommas getrennte Liste der Client-Bibliothekskategorien. Dies beinhaltet alle designbezogenen Bibliotheken (CSS und JS) für die entsprechenden Kategorien. Der Designname wird aus der Abfrage extrahiert.
Entspricht: com.day.cq.widget.HtmlLibraryManager#
writeThemeInclude
js: Eine durch Kommas getrennte Liste der Client-Bibliothekskategorien. Dies bezieht alle Javascript-Bibliotheken für die betreffenden Kategorien mit ein.
Entspricht: com.day.cq.widget.HtmlLibraryManager#writeJsInclude
css: Eine durch Kommas getrennte Liste der Client-Bibliothekskategorien. Dies bezieht alle CSS-Bibliotheken für die betreffenden Kategorien mit ein.
Entspricht: com.day.cq.widget.HtmlLibraryManager#writeCssInclude
themed: Ein Flag, das angibt, ob nur designbezogene oder nicht designbezogene Bibliotheken enthalten sein sollen. Wenn ausgelassen, sind beide Sätze enthalten. Gilt nur, wenn nur JS oder nur CSS enthalten ist (nicht wenn Kategorien oder Designs enthalten sind).
Das Tag <cq:includeClientLib>
kann in einem JSP-Code wie folgt verwendet werden:
<%-- all: js + theme (theme-js + css) --%>
<cq:includeClientLib categories="cq.wcm.edit" />
<%-- only js libs --%>
<cq:includeClientLib js="cq.collab.calendar, cq.security" />
<%-- theme only (theme-js + css) --%>
<cq:includeClientLib theme="cq.collab.calendar, cq.security" />
<%-- css only --%>
<cq:includeClientLib css="cq.collab.calendar, cq.security" />
Das Tag <cq:defineObjects>
macht die folgenden, regelmäßig verwendeten Skriptobjekte verfügbar, auf die der Entwickler verweisen kann. Darüber hinaus werden die Objekte verfügbar gemacht, die durch das Tag <sling:defineObjects>
definiert sind.
componentContext
component
currentDesign
currentPage
currentStyle
designer
editContext
pageManager
pageProperties
Eigenschaften
resourceDesign
resourcePage
requestName
responseName
resourceName
nodeName
logName
resourceResolverName
slingName
componentContextName
editContextName
propertiesName
pageManagerName
currentPageName
resourcePageName
pagePropertiesName
componentName
designerName
currentDesignName
resourceDesignName
currentStyleName
Beispiel
<%@page session="false" contentType="text/html; charset=utf-8" %><%
%><%@ page import="com.day.cq.wcm.api.WCMMode" %><%
%><%@taglib prefix="cq" uri="https://www.day.com/taglibs/cq/1.0" %><%
%><cq:defineObjects/>
Wenn die Datei /libs/foundation/global.jsp
im Skript enthalten ist, wird das Tag <cq:defineObjects />
automatisch eingefügt.
Das Tag <cq:requestURL>
schreibt die aktuelle Anforderungs-URL in JspWriter. Die beiden Tags <cq:addParam>
und <cq:removeParam>
können innerhalb dieses Tags verwendet werden, um die aktuelle Anforderungs-URL zu bearbeiten, bevor sie geschrieben wird.
Sie können Links zur aktuellen Seite mit variierenden Parametern erstellen. Beispielsweise können Sie die Anforderung umwandeln:
mypage.html?mode=view&query=something
in mypage.html?query=something
.
Mit addParam
oder removeParam
wird nur das Auftreten des angegebenen Parameters verändert, alle anderen Parameter sind nicht betroffen.
<cq:requestURL>
weist kein Attribut auf.
Beispiele:
<a href="<cq:requestURL><cq:removeParam name="language"/></cq:requestURL>">remove filter</a>
<a title="filter results" href="<cq:requestURL><cq:addParam name="language" value="${bucket.value}"/></cq:requestURL>">${label} (${bucket.count})</a>
Das Tag <cq:addParam>
fügt einen Anforderungsparameter mit dem angegebenen Namen und Wert zum umschließenden Tag <cq:requestURL>
hinzu.
Es weist folgende Attribute auf:
name
value
Beispiel:
<a title="filter results" href="<cq:requestURL><cq:addParam name="language" value="${bucket.value}"/></cq:requestURL>">${label} (${bucket.count})</a>
Das Tag <cq:removeParam>
entfernt einen Anforderungsparameter mit dem angegebenen Namen und Wert aus dem umschließenden Tag <cq:requestURL>
. Wenn kein Wert angegeben wird, werden alle Parameter mit dem jeweiligen Namen entfernt.
Es weist folgende Attribute auf:
name
Beispiel:
<a href="<cq:requestURL><cq:removeParam name="language"/></cq:requestURL>">remove filter</a>
Die Tag-Bibliothek von Sling enthält hilfreiche Sling-Funktionen.
Wenn Sie die Tag-Bibliothek von Sling in Ihrem Skript verwenden, muss das Skript mit dem folgenden Code beginnen:
<%@ taglib prefix="sling" uri="https://sling.apache.org/taglibs/sling/1.0" %>
Wenn die Datei /libs/foundation/global.jsp
im Skript enthalten ist, wird die Tag-Bibliothek von Sling automatisch deklariert.
Das Tag <sling:include>
fügt eine Ressource in die aktuelle Seite ein.
Es weist folgende Attribute auf:
flush
resource
path
resourceType
replaceSelectors
addSelectors
replaceSuffix
Die Auflösung der Ressource und des Skripts, das im Tag <sling:include>
enthalten ist, ist dieselbe wie bei einer normalen URL-Auflösung in Sling. Standardmäßig werden die Selektoren, die Erweiterung usw. der aktuellen Anforderung auch für das enthaltene Skript verwendet. Sie können durch die Tag-Attribute geändert werden: Beispielsweise ermöglicht Ihnen replaceSelectors="foo.bar"
das Überschreiben der Selektoren.
Beispiele:
<div class="item"><sling:include path="<%= pathtoinclude %>"/></div>
<sling:include resource="<%= par %>"/>
<sling:include addSelectors="spool"/>
<sling:include resource="<%= par %>" resourceType="<%= newType %>"/>
<sling:include resource="<%= par %>" resourceType="<%= newType %>"/>
<sling:include replaceSelectors="content" />
Das Tag <sling:defineObjects>
macht die folgenden, regelmäßig verwendeten Skriptobjekte verfügbar, auf die der Entwickler verweisen kann:
slingRequest
slingResponse
resourceResolver
.sling
resource
currentNode
log
Stellt einen SLF4J Logger zum Protokollieren des Sling-Protokollsystems in Skripten bereit, z. B. log.info("Executing my script").
Es weist folgende Attribute auf:
requestName
responseName
nodeName
l ogName resourceResolverName
slingName
Beispiel:
<%@page session="false" %><%
%><%@page import="com.day.cq.wcm.foundation.forms.ValidationHelper"%><%
%><%@taglib prefix="sling" uri="https://sling.apache.org/taglibs/sling/1.0" %><%
%><sling:defineObjects/>
Die standardmäßige Tag-Bibliothek JavaServer Pages enthält viele hilfreiche und standardmäßige Tags. Die Tag-Bibliotheken für Kern, Formatierung und Funktionen werden anhand von /libs/foundation/global.jsp
wie im folgenden Ausschnitt gezeigt definiert.
<%@taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fmt" uri="https://java.sun.com/jsp/jstl/fmt" %>
<%@taglib prefix="fn" uri="https://java.sun.com/jsp/jstl/functions" %>
Nach dem Importieren der Datei /libs/foundation/global.jsp
wie zuvor beschrieben können Sie die Präfixe c
, fmt
und fn
verwenden, um auf diese Tag-Bibliotheken zuzugreifen. Die offizielle Dokumentation der JSTL ist verfügbar unter Das Java EE 5-Tutorial – standardmäßige Tag-Bibliothek JavaServer Pages.