Le librerie di tag Granite, CQ e Sling consentono di accedere a funzioni specifiche da utilizzare nello script JSP dei modelli e dei componenti.
La libreria di tag Granite contiene funzioni utili.
Quando si sviluppa lo script jsp di un componente dell’interfaccia utente Granite, si consiglia di includere il seguente codice nella parte superiore dello script:
<%@include file="/libs/granite/ui/global.jsp"%>
Il globale dichiara anche la libreria Sling.
<%@taglib prefix="sling" uri="https://sling.apache.org/taglibs/sling" %>
Il tag <ui:includeClientLib>
include una libreria client HTML AEM, che può essere un js, un css o una libreria di temi. Per più inclusioni di tipi diversi, ad esempio js e css, questo tag deve essere utilizzato più volte nel jsp. Questo tag è un wrapper per la comodità dell'interfaccia del servizio [com.adobe.granite.ui.clientlibs.HtmlLibraryManager](https://helpx.adobe.com/experience-manager/6-5/sites/developing/using/reference-materials/javadoc/com/adobe/granite/ui/clientlibs/HtmlLibraryManager.html)
.
Ha i seguenti attributi:
categories - Un elenco di categorie di librerie client separate da virgola. Questo includerà tutte le librerie JavaScript e CSS per le categorie specificate. Il nome del tema viene estratto dalla richiesta.
Equivalente a: com.adobe.granite.ui.clientlibs.HtmlLibraryManager#writeIncludes
theme - Elenco di categorie di libreria client separate da virgola. Questo includerà tutte le librerie correlate al tema (sia CSS che JS) per le categorie specificate. Il nome del tema viene estratto dalla richiesta.
Equivalente a: com.adobe.granite.ui.clientlibs.HtmlLibraryManager#writeThemeInclude
js - Un elenco di categorie di librerie client separate da virgola. Questo includerà tutte le librerie JavaScript per le categorie specificate.
Equivalente a: com.adobe.granite.ui.clientlibs.HtmlLibraryManager#writeJsInclude
css - Elenco di categorie di libreria client separate da virgola. Questo includerà tutte le librerie CSS per le categorie specificate.
Equivalente a: com.adobe.granite.ui.clientlibs.HtmlLibraryManager#writeCssInclude
a tema - È necessario includere un flag che indica solo le librerie a tema o non a tema. Se omesso, verranno inclusi entrambi i set. Si applica solo a JS o agli include CSS puri (non per le categorie o i temi inclusi).
Il tag <ui:includeClientLib>
può essere utilizzato come segue in un jsp:
<%-- 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" />
La libreria dei tag CQ contiene funzioni utili.
Per utilizzare la libreria di tag CQ nel tuo script, lo script deve iniziare con il seguente codice:
<%@taglib prefix="cq" uri="https://www.day.com/taglibs/cq/1.0" %>
Quando il file /libs/foundation/global.jsp
è incluso nello script, la libreria taglib viene dichiarata automaticamente.
Quando si sviluppa lo script jsp di un componente AEM, si consiglia di includere il seguente codice nella parte superiore dello script:
<%@include file="/libs/foundation/global.jsp"%>
Dichiara i tag sling, CQ e jstl ed espone gli oggetti di script utilizzati regolarmente definiti dal tag <cq:defineObjects />
. Questo accorcia e semplifica il codice jsp del tuo componente.
Il tag <cq:text>
è un tag di convenienza che restituisce il testo del componente in un JSP.
Dispone dei seguenti attributi facoltativi:
property - Nome della proprietà da utilizzare. Il nome è relativo alla risorsa corrente.
value - Valore da utilizzare per l'output. Se questo attributo è presente, sovrascrive l'utilizzo dell'attributo di proprietà.
oldValue - Valore da utilizzare per l'output delle differenze. Se questo attributo è presente, sovrascrive l'utilizzo dell'attributo di proprietà.
escapeXml - Definisce se i caratteri <>, &, ' e " nella stringa risultante devono essere convertiti nei rispettivi codici di entità caratteri corrispondenti. Il valore predefinito è false. L'escape viene applicato dopo la formattazione facoltativa.
format - Java.text.Format facoltativo da utilizzare per la formattazione del testo.
noDiff - Elimina il calcolo di un output di diff, anche se è presente un'informazione di diff.
tagClass - Nome della classe CSS di un elemento che racchiude un output non vuoto. Se vuoto, non viene aggiunto alcun elemento.
tagName - Nome dell'elemento che racchiude un output non vuoto. Viene impostato automaticamente su DIV.
segnaposto - Valore predefinito da utilizzare per il testo nullo o vuoto in modalità di modifica, ovvero il segnaposto. Il controllo predefinito viene eseguito dopo la formattazione facoltativa e l'escape, ovvero viene scritto così come è nell'output. Per impostazione predefinita:
<div><span class="cq-text-placeholder">¶</span></div>
default - Valore predefinito da utilizzare per il testo nullo o vuoto. Il controllo predefinito viene eseguito dopo la formattazione facoltativa e l'escape, ovvero viene scritto così come è nell'output.
Alcuni esempi di utilizzo del tag <cq:text>
in un 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"/>
Il tag <cq:setContentBundle>
crea un contesto di localizzazione i18n e lo memorizza nella variabile di configurazione javax.servlet.jsp.jstl.fmt.localizationContext
.
Ha i seguenti attributi:
lingua : la lingua delle impostazioni internazionali per la quale recuperare il bundle di risorse.
source - L'origine da cui devono essere prelevate le impostazioni internazionali. Può essere impostato su uno dei seguenti valori:
static : le impostazioni internazionali vengono rilevate dall’ language
attributo , se disponibile, altrimenti dalle impostazioni internazionali predefinite del server.
page : le impostazioni internazionali vengono prese dalla lingua della pagina o della risorsa corrente, se disponibile, altrimenti dall’ language
attributo , se disponibile, altrimenti dalle impostazioni internazionali predefinite del server.
request - le impostazioni internazionali vengono prese dalle impostazioni internazionali della richiesta ( request.getLocale()
).
auto : le impostazioni internazionali vengono prelevate dall’ language
attributo , se disponibile, altrimenti dalla lingua della pagina o della risorsa corrente, se disponibile, altrimenti dalla richiesta.
Se l'attributo source
non è impostato:
Se l'attributo language
è impostato, l'attributo source
viene impostato automaticamente su "static
.
Se l'attributo language
non è impostato, l'attributo source
viene impostato automaticamente su auto
.
Il "pacchetto di contenuti" può essere semplicemente utilizzato dai tag JSTL <fmt:message>
standard. La ricerca dei messaggi tramite chiavi è duplice:
SlingHttpServletRequest.getResourceBundle(Locale)
). La lingua o le impostazioni internazionali di questo bundle sono definite dagli attributi di lingua e origine del tag <cq:setContentBundle>
.Il tag <cq:setContentBundle>
può essere utilizzato come segue in un jsp.
Per le pagine che ne definiscono la lingua:
... %><cq:setContentBundle source="page"/><% %>
<div class="error"><fmt:message key="Hello"/>
</div> ...
Per pagine personalizzate dall’utente:
... %><cq:setContentBundle scope="request"/><% %>
<div class="error"><fmt:message key="Hello"/>
</div> ...
Il tag <cq:include>
include una risorsa nella pagina corrente.
Ha i seguenti attributi:
scaricatore
path
resourceType
script
ignoreComponentHierarchy
Esempio:
<%@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>
Utilizzare <%@ include file="myScript.jsp" %>
o <cq:include script="myScript.jsp" %>
per includere uno script?
<%@ include file="myScript.jsp" %>
informa il compilatore JSP di includere un file completo nel file corrente. È come se il contenuto del file incluso fosse stato incollato direttamente nel file originale.<cq:include script="myScript.jsp">
, il file viene incluso in fase di runtime.Utilizzare <cq:include>
o <sling:include>
?
<cq:include>
.<cq:include>
consente di includere direttamente i file di script in base al loro nome quando si utilizza l’attributo script. Questo prende in considerazione l’ereditarietà di componenti e tipi di risorse ed è spesso più semplice della rigorosa aderenza alla risoluzione degli script di Sling utilizzando selettori ed estensioni.<cq:includeClientLib>
è stato dichiarato obsoleto a partire dal AEM 5.6. <ui:includeClientLib>
dovrebbe invece essere utilizzato.
Il tag <cq:includeClientLib>
include una libreria client HTML AEM, che può essere un js, un css o una libreria di temi. Per più inclusioni di tipi diversi, ad esempio js e css, questo tag deve essere utilizzato più volte nel jsp. Questo tag è un wrapper per la comodità dell'interfaccia del servizio com.day.cq.widget.HtmlLibraryManager
.
Ha i seguenti attributi:
categories - Un elenco di categorie di librerie client separate da virgola. Questo includerà tutte le librerie JavaScript e CSS per le categorie specificate. Il nome del tema viene estratto dalla richiesta.
Equivalente a: com.day.cq.widget.HtmlLibraryManager#writeIncludes
theme - Elenco di categorie di libreria client separate da virgola. Questo includerà tutte le librerie correlate al tema (sia CSS che JS) per le categorie specificate. Il nome del tema viene estratto dalla richiesta.
Equivalente a: com.day.cq.widget.HtmlLibraryManager#
writeThemeInclude
js - Un elenco di categorie di librerie client separate da virgola. Questo includerà tutte le librerie JavaScript per le categorie specificate.
Equivalente a: com.day.cq.widget.HtmlLibraryManager#writeJsInclude
css - Elenco di categorie di libreria client separate da virgola. Questo includerà tutte le librerie CSS per le categorie specificate.
Equivalente a: com.day.cq.widget.HtmlLibraryManager#writeCssInclude
a tema - È necessario includere un flag che indica solo le librerie a tema o non a tema. Se omesso, verranno inclusi entrambi i set. Si applica solo a JS o agli include CSS puri (non per le categorie o i temi inclusi).
Il tag <cq:includeClientLib>
può essere utilizzato come segue in un jsp:
<%-- 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" />
Il tag <cq:defineObjects>
espone i seguenti oggetti di script utilizzati regolarmente, a cui lo sviluppatore può fare riferimento. Inoltre espone gli oggetti definiti dal tag <sling:defineObjects>
.
componentContext
componente
currentDesign
currentPage
currentStyle
designer
editContext
pageManager
pageProperties
proprietà
resourceDesign
resourcePage
requestName
responseName
resourceName
nodeName
logName
resourceResolverName
slingName
componentContextName
editContextName
propertiesName
pageManagerName
currentPageName
resourcePageName
pagePropertiesName
componentName
designerName
currentDesignName
resourceDesignName
currentStyleName
Esempio
<%@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/>
Quando il file /libs/foundation/global.jsp
è incluso nello script, il tag <cq:defineObjects />
viene incluso automaticamente.
Il tag <cq:requestURL>
scrive l'URL della richiesta corrente in JspWriter. I due tag <cq:addParam>
e <cq:removeParam>
possono essere utilizzati all’interno del corpo di questo tag per modificare l’URL della richiesta corrente prima che venga scritto.
Consente di creare collegamenti alla pagina corrente con parametri variabili. Ad esempio, ti consente di trasformare la richiesta:
mypage.html?mode=view&query=something
in mypage.html?query=something
.
L'utilizzo di addParam
o removeParam
cambia solo l'occorrenza del parametro dato, tutti gli altri parametri non vengono modificati.
<cq:requestURL>
non ha alcun attributo.
Esempi:
<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>
Il tag <cq:addParam>
aggiunge un parametro di richiesta con il nome e il valore specificati al tag di inclusione <cq:requestURL>
.
Ha i seguenti attributi:
name
valore
Esempio:
<a title="filter results" href="<cq:requestURL><cq:addParam name="language" value="${bucket.value}"/></cq:requestURL>">${label} (${bucket.count})</a>
Il tag <cq:removeParam>
rimuove un parametro di richiesta con il nome e il valore specificati dal tag di inclusione <cq:requestURL>
. Se non viene fornito alcun valore, vengono rimossi tutti i parametri con il nome specificato.
Ha i seguenti attributi:
name
Esempio:
<a href="<cq:requestURL><cq:removeParam name="language"/></cq:requestURL>">remove filter</a>
La libreria di tag Sling contiene utili funzioni Sling.
Quando utilizzi la libreria di tag Sling nello script, lo script deve iniziare con il seguente codice:
<%@ taglib prefix="sling" uri="https://sling.apache.org/taglibs/sling/1.0" %>
Quando il file /libs/foundation/global.jsp
è incluso nello script, il tag sling viene dichiarato automaticamente.
Il tag <sling:include>
include una risorsa nella pagina corrente.
Ha i seguenti attributi:
scaricatore
riferimento
path
resourceType
replaceSelectors
addSelectors
replaceSuffix
La risoluzione della risorsa e dello script incluso con il tag <sling:include>
è la stessa di una normale risoluzione URL sling. Per impostazione predefinita, i selettori, l’estensione, ecc. dalla richiesta corrente vengono utilizzati anche per lo script incluso. Possono essere modificati tramite gli attributi del tag: ad esempio replaceSelectors="foo.bar"
consente di sovrascrivere i selettori.
Esempi:
<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" />
Il tag <sling:defineObjects>
espone i seguenti oggetti di script, utilizzati regolarmente e a cui lo sviluppatore può fare riferimento:
slingRequest
slingResponse
resourceResolver
.sling
riferimento
currentNode
log
Fornisce un logger SLF4J per la registrazione nel sistema di log Sling dall'interno di script, ad esempio log.info("Esecuzione dello script").
Ha i seguenti attributi:
requestName
responseName
nodeName
l ogName resourceResolverName
slingName
Esempio:
<%@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/>
La Libreria di tag standard per le pagine JavaServer contiene molti tag utili e standard. Le librerie di base, di formattazione e di funzioni sono definite da /libs/foundation/global.jsp
come mostrato nel frammento seguente.
<%@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" %>
Dopo aver importato il file /libs/foundation/global.jsp
come descritto in precedenza, puoi utilizzare i prefissi c
, fmt
e fn
per accedere a tali tag. La documentazione ufficiale del JSTL è disponibile all'indirizzo Esercitazione Java EE 5 - Libreria di tag standard delle pagine JavaServer.