标记库

Granite、CQ和Sling标签库允许您访问特定函数,以便在模板和组件的JSP脚本中使用。

Granite标签库

Granite标签库包含有用的函数。

在开发Granite UI组件的jsp脚本时,建议在脚本顶部包含以下代码:

<%@include file="/libs/granite/ui/global.jsp?lang=zh-Hans"%>

全局还声明Sling库

<%@taglib prefix="sling" uri="https://sling.apache.org/taglibs/sling" %>

ui:includeClientLib

<ui:includeClientLib>标记包括AEM html客户端库,它可以是js、css或主题库。 对于不同类型的多个包含项(例如js和css),此标记需要在jsp中多次使用。 此标签是 [com.adobe.granite.ui.clientlibs.HtmlLibraryManager](https://helpx.adobe.com/cn/experience-manager/6-5/sites/developing/using/reference-materials/javadoc/com/adobe/granite/ui/clientlibs/HtmlLibraryManager.html)服务接口的便捷包装器。

它具有以下属性:

类别 -一列表以逗号分隔的客户端库类别。这将包括给定类别的所有Javascript和CSS库。 主题名称会从请求中提取。

等效于:com.adobe.granite.ui.clientlibs.HtmlLibraryManager#writeIncludes

theme —— 一列表以逗号分隔的客户端lib类别。这将包括给定类别的所有与主题相关的库(CSS和JS)。 主题名称会从请求中提取。

等效于:com.adobe.granite.ui.clientlibs.HtmlLibraryManager#writeThemeInclude

js —— 一列表以逗号分隔的客户端库类别。这将包括给定类别的所有Javascript库。

等效于:com.adobe.granite.ui.clientlibs.HtmlLibraryManager#writeJsInclude

css —— 一列表以逗号分隔的客户端lib类别。这将包括给定类别的所有CSS库。

等效于:com.adobe.granite.ui.clientlibs.HtmlLibraryManager#writeCssInclude

主题 -应包含仅指示主题或非主题库的标志。如果省略,则包括这两个集。 仅适用于纯JS或CSS包含(不适用于类别或主题包含)。

<ui:includeClientLib>标记可在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" />

CQ标记库

CQ标签库包含有帮助的函数。

要在脚本中使用CQ标签库,脚本必须开始以下代码:

<%@taglib prefix="cq" uri="https://www.day.com/taglibs/cq/1.0" %>
注意

当脚本中包含/libs/foundation/global.jsp文件时,将自动声明taglib。

在开发AEM组件的jsp脚本时,建议在脚本顶部包含以下代码:

<%@include file="/libs/foundation/global.jsp?lang=zh-Hans"%>

它声明sling、CQ和jstl标语,并公开由 <cq:defineObjects />标签定义的常规脚本对象。 这缩短了并简化了组件的jsp代码。

cq:text

<cq:text>标签是一个方便的标签,它以JSP输出组件文本。

它具有以下可选属性:

property —— 要使用的属性的名称。该名称相对于当前资源。

value —— 用于输出的值。如果存在此属性,则会覆盖属性的使用。

oldValue —— 用于差异输出的值。如果存在此属性,则会覆盖属性的使用。

escapeXml -定义生成字符串 <>中的字符、&、'和"是否应转换为相应的字符实体代码。默认值为 false。请注意,转义在可选格式设置后应用。

format -用于设置文本格式的可选java.text.Format。

noDiff -隐含差异输出的计算,即使存在差异信息也是如此。

tagClass —— 将环绕非空输出的元素的CSS类名。如果为空,则不添加任何元素。

tagName —— 将包含非空输出的元素的名称。它默认为DIV。

占位符 -用于编辑模式(即占位符)中空或空文本的默认值。请注意,默认检查是在可选格式和转义之后执行的,即按原样写入输出。 默认为:

<div><span class="cq-text-placeholder">&para;</span></div>

default —— 用于null或空文本的默认值。请注意,默认检查是在可选格式设置之后执行并转义的,即按原样写入输出。

一些示例说明如何在JSP中使用<cq:text>标记:

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

cq:setContentBundle

<cq:setContentBundle>标签创建i18n本地化上下文并将其存储在javax.servlet.jsp.jstl.fmt.localizationContext配置变量中。

它具有以下属性:

语言 -要检索资源包的区域设置的语言。

source —— 应使用区域设置的源。它可以设置为以下值之一:

  • static —— 区域设置从属性(如 language 果可用)取出,否则从服务器默认区域设置取出。

  • page —— 区域设置取自当前页面或资源的语言(如果可用),否则取自属 language 性(如果可用),否则取自服务器默认区域设置。

  • request —— 区域设置是从请求区域设置( request.getLocale())中。

  • 自动 -区域设置从属性(如 language 果可用)中取出,否则从当前页面或资源的语言(如果可用)中取出,否则从请求中取出。

如果未设置source属性:

  • 如果设置了language属性,则source属性默认为“static”。

  • 如果未设置language属性,则source属性默认为auto

标准JSTL <fmt:message>标记只能使用“内容捆绑”。 按键查找消息的方式有两倍:

  1. 首先,搜索当前呈现的基础资源的JCR属性以查找转换。 这允许您定义一个简单的组件对话框来编辑这些值。
  2. 如果节点不包含与键名称完全相似的属性,则回退是从sling请求(SlingHttpServletRequest.getResourceBundle(Locale))加载资源包。 此包的语言或区域设置由<cq:setContentBundle>标签的语言和源属性定义。

<cq:setContentBundle>标记可在jsp中如下使用。

对于定义其语言的页面:

... %><cq:setContentBundle source="page"/><%  %>
<div class="error"><fmt:message key="Hello"/>
</div> ...

对于用户个性化页面:

... %><cq:setContentBundle scope="request"/><% %>
<div class="error"><fmt:message key="Hello"/>
</div> ...

cq:include

<cq:include>标记包含当前页面中的资源。

它具有以下属性:

  • 一个布尔值,用于定义是否在包括目标之前刷新输出。

路径

  • 要包含在当前请求处理中的资源对象的路径。 如果此路径是相对路径,则会将其附加到其脚本包含给定资源的当前资源的路径。 必须指定path和resourceType或脚本。

resourceType

  • 要包括的资源的资源类型。 如果设置了资源类型,则路径必须是资源对象的确切路径:在这种情况下,不支持向路径添加参数、选择器和扩展。
  • 如果要包含的资源是使用无法解析为资源的路径属性指定的,则标记可能会在路径和此资源类型之外创建合成资源对象。
  • 必须指定path和resourceType或脚本。

脚本

  • 要包含的jsp脚本。 必须指定path和resourceType或脚本。

ignoreComponentHierarchy

  • 一个布尔值,它控制是否应忽略组件层次结构以实现脚本解析。 如果为true,则只考虑搜索路径。

示例:

<%@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>

是否应使用<%@ include file="myScript.jsp" %><cq:include script="myScript.jsp" %>来包含脚本?

  • <%@ include file="myScript.jsp" %>指令通知JSP编译器将一个完整文件包含到当前文件中。 就像所包含文件的内容直接粘贴到原始文件中一样。
  • <cq:include script="myScript.jsp">标签中,文件在运行时包含。

应使用<cq:include>还是<sling:include>?

  • 开发AEM组件时,Adobe建议您使用<cq:include>
  • <cq:include> 允许您在使用script属性时直接按脚本文件的名称包含脚本文件。这考虑了组件和资源类型继承,并且通常比使用选择器和扩展严格遵循Sling的脚本解析更简单。

cq:includeClientLib

注意

<cq:includeClientLib> 自AEM 5.6起已弃用。 <ui:includeClientLib> 应改用。

<cq:includeClientLib>标记包括AEM html客户端库,它可以是js、css或主题库。 对于不同类型的多个包含项(例如js和css),此标记需要在jsp中多次使用。 此标签是com.day.cq.widget.HtmlLibraryManager服务接口的便捷包装器。

它具有以下属性:

类别 -一列表以逗号分隔的客户端库类别。这将包括给定类别的所有Javascript和CSS库。 主题名称会从请求中提取。

等效于:com.day.cq.widget.HtmlLibraryManager#writeIncludes

theme —— 一列表以逗号分隔的客户端lib类别。这将包括给定类别的所有与主题相关的库(CSS和JS)。 主题名称会从请求中提取。

等效于:com.day.cq.widget.HtmlLibraryManager#writeThemeInclude

js —— 一列表以逗号分隔的客户端库类别。这将包括给定类别的所有Javascript库。

等效于:com.day.cq.widget.HtmlLibraryManager#writeJsInclude

css —— 一列表以逗号分隔的客户端lib类别。这将包括给定类别的所有CSS库。

等效于:com.day.cq.widget.HtmlLibraryManager#writeCssInclude

主题 -应包含仅指示主题或非主题库的标志。如果省略,则包括这两个集。 仅适用于纯JS或CSS包含(不适用于类别或主题包含)。

<cq:includeClientLib>标记可在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" />

cq:defineObjects

<cq:defineObjects>标记公开以下常用脚本对象,这些对象可由开发人员引用。 它还公开由 <sling:defineObjects>标签定义的对象。

componentContext

  • 请求的当前组件上下文对象(com.day.cq.wcm.api.components.ComponentContext接口)。

组件

  • 当前资源的当前AEM组件对象(com.day.cq.wcm.api.components.Component接口)。

currentDesign

  • 当前页面的当前设计对象(com.day.cq.wcm.api.designer.Design界面)。

currentPage

  • 当前AEM WCM页面对象(com.day.cq.wcm.api.Page界面)。

currentStyle

  • 当前单元格的当前样式对象(com.day.cq.wcm.api.designer.Style界面)。

设计师

  • 用于访问设计信息的设计器对象(com.day.cq.wcm.api.designer.Designer界面)。

editContext

  • aem组件的edit context对象(com.day.cq.wcm.api.components.EditContext接口)。

pageManager

  • 页面级操作的页面管理器对象(com.day.cq.wcm.api.PageManager界面)。

pageProperties

  • 当前页面的页面属性对象(org.apache.sling.api.resource.ValueMap)。

属性

  • 当前资源的属性对象(org.apache.sling.api.resource.ValueMap)。

resourceDesign

  • 资源页面的设计对象(com.day.cq.wcm.api.designer.Design界面)。

resourcePage

  • 资源页面对象(com.day.cq.wcm.api.Page接口)。
  • 它具有以下属性:

requestName

  • 继承自sling

responseName

  • 继承自sling

resourceName

  • 继承自sling

nodeName

  • 继承自sling

logName

  • 继承自sling

resourceResolverName

  • 继承自sling

slingName

  • 继承自sling

componentContextName

  • 特定于wcm

editContextName

  • 特定于wcm

propertiesName

  • 特定于wcm

pageManagerName

  • 特定于wcm

currentPageName

  • 特定于wcm

resourcePageName

  • 特定于wcm

pagePropertiesName

  • 特定于wcm

componentName

  • 特定于wcm

designerName

  • 特定于wcm

currentDesignName

  • 特定于wcm

resourceDesignName

  • 特定于wcm

currentStyleName

  • 特定于wcm

示例

<%@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/>
注意

当脚本中包含/libs/foundation/global.jsp文件时,会自动包含<cq:defineObjects />标记。

cq:requestURL

<cq:requestURL>标记将当前请求URL写入JspWriter。 这两个标签 <cq:addParam> <cq:removeParam>可在此标签的正文中使用,以在写入当前请求URL之前修改它。

它允许您创建具有可变参数的指向当前页面的链接。 例如,它允许您转换请求:

mypage.html?mode=view&query=somethingmypage.html?query=something.

使用addParamremoveParam只会更改给定参数的出现情况,所有其他参数都不会受到影响。

<cq:requestURL> 没有任何属性。

示例:

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

cq:addParam

<cq:addParam>标签将具有给定名称和值的请求参数添加到封闭的 <cq:requestURL>标签中。

它具有以下属性:

name

  • 要添加的参数的名称

value

  • 要添加的参数值

示例:

<a title="filter results" href="<cq:requestURL><cq:addParam name="language" value="${bucket.value}"/></cq:requestURL>">${label} (${bucket.count})</a>

cq:removeParam

<cq:removeParam>标签从封闭的 <cq:requestURL>标签中删除具有给定名称和值的请求参数。 如果未提供任何值,则删除所有具有给定名称的参数。

它具有以下属性:

名称

  • 要删除的参数的名称

示例:

<a href="<cq:requestURL><cq:removeParam name="language"/></cq:requestURL>">remove filter</a>

Sling标签库

Sling标签库包含有用的Sling函数。

在脚本中使用Sling标签库时,脚本必须开始以下代码:

<%@ taglib prefix="sling" uri="https://sling.apache.org/taglibs/sling/1.0" %>
注意

当脚本中包含/libs/foundation/global.jsp文件时,sling taglib将自动声明。

sling:include

<sling:include>标记包含当前页面中的资源。

它具有以下属性:

  • 一个布尔值,用于定义是否在包括目标之前刷新输出。

资源

  • 要包含在当前请求处理中的资源对象。 必须指定资源或路径。 如果同时指定了两者,则资源优先。

路径

  • 要包含在当前请求处理中的资源对象的路径。 如果此路径是相对路径,则会将其附加到其脚本包含给定资源的当前资源的路径。 必须指定资源或路径。 如果同时指定了两者,则资源优先。

resourceType

  • 要包括的资源的资源类型。 如果设置了资源类型,则路径必须是资源对象的确切路径:在这种情况下,不支持向路径添加参数、选择器和扩展。
  • 如果要包含的资源是使用无法解析为资源的路径属性指定的,则标记可能会在路径和此资源类型之外创建合成资源对象。

replaceSelectors

  • 调度时,选择器将替换为此属性的值。

addSelectors

  • 调度时,此属性的值将添加到选择器中。

replaceSuffix

  • 调度时,后缀将替换为此属性的值。
注意

<sling:include>标记中包含的资源和脚本的分辨率与普通sling URL分辨率相同。 默认情况下,选择器、扩展等。 当前请求中的脚本也使用。 可以通过标记属性修改它们:例如,replaceSelectors="foo.bar"允许您覆盖选择器。

示例:

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

sling:defineObjects

<sling:defineObjects>标记公开以下常用脚本对象,这些对象可由开发人员引用:

slingRequest

  • SlingHttpServletRequest对象,提供对HTTP请求头信息的访问——扩展标准HttpServletRequest-并提供对Sling特定内容(如资源、路径信息、选择器等)的访问。

slingResponse

  • SlingHttpServletResponse对象,提供对服务器创建的HTTP响应的访问。 它当前与它扩展的HttpServletResponse相同。请求
  • 标准JSP请求对象,它是纯HttpServletRequest。响应
  • 标准JSP响应对象,它是纯HttpServletResponse。

resourceResolver

  • 当前ResourceResolver对象。 它与slingRequest.getResourceResolver()相同

sling

  • 一个SlingScriptHelper对象,包含脚本的简便方法,主要是sling.include('/some/other/resource'),用于在此响应中包含其他资源的响应(例如, 嵌入标题html片段)和sling.getService(foo.bar.Service.class),以检索Sling(类表示法,具体取决于脚本语言)中提供的OSGi服务。

资源

  • 要处理的当前资源对象,具体取决于请求的URL。 它与slingRequest.getResource()相同。

currentNode

  • 如果当前资源指向JCR节点(Sling中通常为此情况),则这允许直接访问Node对象。 否则,未定义此对象。

日志

  • 提供SLF4J记录器,用于从脚本中登录到Sling日志系统,例如 log.info("执行我的脚本")。

  • 它具有以下属性:

requestName

responseName

nodeName

l ogName resourceResolverName

slingName

示例:

<%@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/>

JSTL标记库

JavaServer Pages标准标记库包含许多有用的标记和标准标记。 核心、格式和函数标语由/libs/foundation/global.jsp定义,如下面的代码片断所示。

/libs/foundation/global.jsp的解压

<%@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" %>

在按前面所述导入/libs/foundation/global.jsp文件后,可以使用cfmtfn前缀访问这些标语。 JSTL的官方文档位于Java EE 5教程- JavaServer Pages标准标记库

On this page

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now