Las bibliotecas de etiquetas Granite, CQ y Sling le proporcionan acceso a funciones específicas para utilizarlas en la secuencia de comandos JSP de sus plantillas y componentes.
La biblioteca de etiquetas Granite contiene funciones útiles.
Al desarrollar la secuencia de comandos jsp de un componente de la interfaz de usuario Granite, se recomienda incluir el siguiente código en la parte superior de la secuencia de comandos:
<%@include file="/libs/granite/ui/global.jsp"%>
El global también declara la biblioteca Sling.
<%@taglib prefix="sling" uri="https://sling.apache.org/taglibs/sling" %>
La etiqueta <ui:includeClientLib>
incluye una biblioteca de cliente HTML AEM, que puede ser un js, un css o una biblioteca de temas. Para varias inclusiones de diferentes tipos, por ejemplo js y css, esta etiqueta debe usarse varias veces en el jsp. Esta etiqueta es un envoltorio práctico alrededor de la interfaz de servicio [com.adobe.granite.ui.clientlibs.HtmlLibraryManager](https://helpx.adobe.com/es/experience-manager/6-4/sites/developing/using/reference-materials/javadoc/com/adobe/granite/ui/clientlibs/HtmlLibraryManager.html)
.
Tiene los atributos siguientes:
categorías : lista de categorías de biblioteca de cliente separadas por coma. Esto incluirá todas las bibliotecas Javascript y CSS de las categorías determinadas. El nombre del tema se extrae de la solicitud.
Equivale a: com.adobe.granite.ui.clientlibs.HtmlLibraryManager#writeIncludes
tema : lista de categorías de biblioteca de cliente separadas por coma. Esto incluirá todas las bibliotecas relacionadas con el tema (CSS y JS) para las categorías dadas. El nombre del tema se extrae de la solicitud.
Equivale a: com.adobe.granite.ui.clientlibs.HtmlLibraryManager#writeThemeInclude
js : lista de categorías de biblioteca de cliente separadas por coma. Esto incluirá todas las bibliotecas Javascript de las categorías dadas.
Equivale a: com.adobe.granite.ui.clientlibs.HtmlLibraryManager#writeJsInclude
css : lista de categorías de biblioteca de cliente separadas por coma. Esto incluirá todas las bibliotecas CSS de las categorías dadas.
Equivale a: com.adobe.granite.ui.clientlibs.HtmlLibraryManager#writeCssInclude
themed : se debe incluir un indicador que indique únicamente bibliotecas temáticas o no temáticas. Si se omite, se incluyen ambos conjuntos. Solo se aplica a las inclusiones JS o CSS puras (no para categorías o temas incluidos).
La etiqueta <ui:includeClientLib>
se puede usar de la siguiente manera en 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 biblioteca de etiquetas CQ contiene funciones útiles.
Para utilizar la biblioteca de etiquetas CQ en la secuencia de comandos, la secuencia de comandos debe tener en inicio el siguiente código:
<%@taglib prefix="cq" uri="https://www.day.com/taglibs/cq/1.0" %>
Cuando se incluye el archivo /libs/foundation/global.jsp
en el script, la biblioteca de etiquetas se declara automáticamente.
Al desarrollar la secuencia de comandos jsp de un componente AEM, se recomienda incluir el siguiente código en la parte superior de la secuencia de comandos:
<%@include file="/libs/foundation/global.jsp"%>
Declara los taglibs sling, CQ y jstl y expone los objetos de secuencias de comandos utilizados habitualmente definidos por la etiqueta <cq:defineObjects />
. Esto acorta y simplifica el código jsp del componente.
La etiqueta <cq:text>
es una etiqueta de conveniencia que genera texto de componente en un JSP.
Tiene los siguientes atributos opcionales:
propiedad : nombre de la propiedad que se va a utilizar. El nombre es relativo al recurso actual.
valor : valor que se va a utilizar para la salida. Si este atributo está presente, sobrescribe el uso del atributo de propiedad.
oldValue - Valor que se usará para la salida diff. Si este atributo está presente, sobrescribe el uso del atributo de propiedad.
escapeXml : define si los caracteres <>, &, ' y " de la cadena resultante deben convertirse a sus códigos de entidad de carácter correspondientes. El valor predeterminado es false. Tenga en cuenta que el carácter de escape se aplica después del formato opcional.
format - Java.text.Format opcional que se utiliza para dar formato al texto.
noDiff - Suprime el cálculo de una salida de diferencia, aunque haya una información de diferencia.
tagClass : nombre de clase CSS de un elemento que rodeará una salida no vacía. Si está vacío, no se agrega ningún elemento.
tagName : nombre del elemento que rodeará una salida no vacía. El valor predeterminado es DIV.
marcador de posición: valor predeterminado que se usará para texto nulo o vacío en el modo de edición, es decir, el marcador de posición. Tenga en cuenta que la comprobación predeterminada se realiza después del formato opcional y de los caracteres de escape, es decir, se escribe tal cual en la salida. El valor predeterminado es:
<div><span class="cq-text-placeholder">¶</span></div>
default - Valor predeterminado que se usará para texto nulo o vacío. Tenga en cuenta que la comprobación predeterminada se realiza después del formato opcional y el escape, es decir, se escribe tal cual en la salida.
Algunos ejemplos de cómo se puede utilizar la etiqueta <cq:text>
en 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"/>
La etiqueta <cq:setContentBundle>
crea un contexto de localización i18n y lo almacena en la variable de configuración javax.servlet.jsp.jstl.fmt.localizationContext
.
Tiene los atributos siguientes:
idioma : el idioma de la configuración regional para la que se recupera el paquete de recursos.
source : la fuente desde la que se debe extraer la configuración regional. Se puede establecer en uno de los siguientes valores:
static : la configuración regional se toma del language
atributo, si está disponible, en caso contrario, de la configuración regional predeterminada del servidor.
page : la configuración regional se toma del idioma de la página actual o del recurso, si está disponible; de lo contrario, se toma del language
atributo si está disponible, en caso contrario, de la configuración regional predeterminada del servidor.
solicitud : la configuración regional se toma de la configuración regional de la solicitud ( request.getLocale()
).
auto : la configuración regional se toma del language
atributo si está disponible, de lo contrario del idioma de la página actual o del recurso si está disponible, de lo contrario de la solicitud.
Si el atributo source
no está establecido:
Si se establece el atributo language
, el atributo source
tiene el valor predeterminado "static
.
Si no se establece el atributo language
, el atributo source
tiene el valor predeterminado auto
.
El "paquete de contenido" se puede utilizar simplemente con etiquetas JSTL <fmt:message>
estándar. La búsqueda de mensajes por claves es doble:
SlingHttpServletRequest.getResourceBundle(Locale)
). El idioma o la configuración regional de este paquete está definido por los atributos de idioma y origen de la etiqueta <cq:setContentBundle>
.La etiqueta <cq:setContentBundle>
se puede usar de la siguiente manera en un jsp.
Para las páginas que definen su idioma:
... %><cq:setContentBundle source="page"/><% %>
<div class="error"><fmt:message key="Hello"/>
</div> ...
Para páginas personalizadas del usuario:
... %><cq:setContentBundle scope="request"/><% %>
<div class="error"><fmt:message key="Hello"/>
</div> ...
La etiqueta <cq:include>
incluye un recurso en la página actual.
Tiene los atributos siguientes:
vaciar
path
resourceType
script
ignoreComponentHierarchy
Ejemplo:
<%@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>
¿Debe utilizar <%@ include file="myScript.jsp" %>
o <cq:include script="myScript.jsp" %>
para incluir una secuencia de comandos?
<%@ include file="myScript.jsp" %>
informa al compilador JSP de que incluya un archivo completo en el archivo actual. Es como si el contenido del archivo incluido se hubiera pegado directamente en el archivo original.<cq:include script="myScript.jsp">
, el archivo se incluye en tiempo de ejecución.¿Debe utilizar <cq:include>
o <sling:include>
?
<cq:include>
.<cq:include>
permite incluir directamente los archivos de secuencias de comandos por su nombre al utilizar el atributo de secuencia de comandos. Esto tiene en cuenta la herencia de componentes y tipos de recursos, y a menudo es más simple que el cumplimiento estricto de la resolución de secuencias de comandos de Sling mediante selectores y extensiones.<cq:includeClientLib>
ha quedado obsoleto desde AEM 5.6. <ui:includeClientLib>
en su lugar.
La etiqueta <cq:includeClientLib>
incluye una biblioteca de cliente HTML AEM, que puede ser un js, un css o una biblioteca de temas. Para varias inclusiones de diferentes tipos, por ejemplo js y css, esta etiqueta debe usarse varias veces en el jsp. Esta etiqueta es un envoltorio práctico alrededor de la interfaz de servicio com.day.cq.widget.HtmlLibraryManager
.
Tiene los atributos siguientes:
categorías : lista de categorías de biblioteca de cliente separadas por coma. Esto incluirá todas las bibliotecas Javascript y CSS de las categorías determinadas. El nombre del tema se extrae de la solicitud.
Equivale a: com.day.cq.widget.HtmlLibraryManager#writeIncludes
tema : lista de categorías de biblioteca de cliente separadas por coma. Esto incluirá todas las bibliotecas relacionadas con el tema (CSS y JS) para las categorías dadas. El nombre del tema se extrae de la solicitud.
Equivalente a: com.day.cq.widget.HtmlLibraryManager#
writeThemeInclude
js : lista de categorías de biblioteca de cliente separadas por coma. Esto incluirá todas las bibliotecas Javascript de las categorías dadas.
Equivale a: com.day.cq.widget.HtmlLibraryManager#writeJsInclude
css : lista de categorías de biblioteca de cliente separadas por coma. Esto incluirá todas las bibliotecas CSS de las categorías dadas.
Equivale a: com.day.cq.widget.HtmlLibraryManager#writeCssInclude
themed : se debe incluir un indicador que indique únicamente bibliotecas temáticas o no temáticas. Si se omite, se incluyen ambos conjuntos. Solo se aplica a las inclusiones JS o CSS puras (no para categorías o temas incluidos).
La etiqueta <cq:includeClientLib>
se puede usar de la siguiente manera en 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" />
La etiqueta <cq:defineObjects>
expone los siguientes objetos de secuencias de comandos, que se utilizan con regularidad, a los que el desarrollador puede hacer referencia. También expone los objetos definidos por la etiqueta <sling:defineObjects>
.
componentContext
componente
currentDesign
currentPage
currentStyle
designer
editContext
pageManager
pageProperties
propiedades
resourceDesign
resourcePage
requestName
responseName
resourceName
nodeName
logName
resourceResolverName
slingName
componentContextName
editContextName
propertiesName
pageManagerName
currentPageName
resourcePageName
pagePropertiesName
componentName
designerName
currentDesignName
resourceDesignName
currentStyleName
Ejemplo
<%@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/>
Cuando el archivo /libs/foundation/global.jsp
se incluye en la secuencia de comandos, la etiqueta <cq:defineObjects />
se incluye automáticamente.
La etiqueta <cq:requestURL>
escribe la dirección URL de solicitud actual en JspWriter. Las dos etiquetas <cq:addParam>
y <cq:removeParam>
y pueden utilizarse dentro del cuerpo de esta etiqueta para modificar la dirección URL de solicitud actual antes de que se escriba.
Permite crear vínculos a la página actual con parámetros variables. Por ejemplo, permite transformar la solicitud:
mypage.html?mode=view&query=something
en mypage.html?query=something
.
El uso de addParam
o removeParam
sólo cambia la incidencia del parámetro dado, el resto de los parámetros no se ven afectados.
<cq:requestURL>
no tiene ningún atributo.
Ejemplos:
<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>
La etiqueta <cq:addParam>
agrega un parámetro de solicitud con el nombre y el valor dados a la etiqueta <cq:requestURL>
que lo rodea.
Tiene los atributos siguientes:
name
seleccionado
Ejemplo:
<a title="filter results" href="<cq:requestURL><cq:addParam name="language" value="${bucket.value}"/></cq:requestURL>">${label} (${bucket.count})</a>
La etiqueta <cq:removeParam>
elimina un parámetro de solicitud con el nombre y valor dados de la etiqueta <cq:requestURL>
que lo rodea. Si no se proporciona ningún valor, se eliminan todos los parámetros con el nombre dado.
Tiene los atributos siguientes:
name
Ejemplo:
<a href="<cq:requestURL><cq:removeParam name="language"/></cq:requestURL>">remove filter</a>
La biblioteca de etiquetas Sling contiene funciones Sling útiles.
Cuando se utiliza la biblioteca de etiquetas Sling en la secuencia de comandos, la secuencia de comandos debe tener en inicio el siguiente código:
<%@ taglib prefix="sling" uri="https://sling.apache.org/taglibs/sling/1.0" %>
Cuando se incluye el archivo /libs/foundation/global.jsp
en el script, la biblioteca de etiquetas sling se declara automáticamente.
La etiqueta <sling:include>
incluye un recurso en la página actual.
Tiene los atributos siguientes:
vaciar
medio
path
resourceType
replaceSelectors
addSelectors
replaceSuffix
La resolución del recurso y la secuencia de comandos que se incluyen con la etiqueta <sling:include>
es la misma que para una resolución de URL de sling normal. De forma predeterminada, los selectores, la extensión, etc. de la solicitud actual también se utilizan para la secuencia de comandos incluida. Se pueden modificar mediante los atributos de etiqueta: por ejemplo, replaceSelectors="foo.bar"
permite sobrescribir los selectores.
Ejemplos:
<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" />
La etiqueta <sling:defineObjects>
expone los siguientes objetos de secuencias de comandos, que se utilizan con regularidad, a los que el desarrollador puede hacer referencia:
slingRequest
slingResponse
resourceResolver
.sling
medio
currentNode
registro
Proporciona un registrador SLF4J para iniciar sesión en el sistema de registro Sling desde scripts, por ejemplo. log.info("Ejecutando mi script").
Tiene los atributos siguientes:
requestName
responseName
nodeName
l ogName resourceResolverName
slingName
Ejemplo:
<%@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 biblioteca de etiquetas estándar de páginas JavaServer contiene muchas etiquetas útiles y estándar. Los taglibs de núcleo, formato y funciones se definen mediante /libs/foundation/global.jsp
como se muestra en el siguiente fragmento de código.
<%@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" %>
Después de importar el archivo /libs/foundation/global.jsp
como se ha descrito anteriormente, puede utilizar los prefijos c
, fmt
y fn
para acceder a esos taglibs. La documentación oficial del JSTL está disponible en Tutorial de Java EE 5 - JavaServer Pages Standard Tag Library.