Granite、CQ和Sling标记库允许您访问特定函数,以在模板和组件的JSP脚本中使用。
Granite标记库包含有用的函数。
在开发Granite UI组件的jsp脚本时,建议在脚本顶部包含以下代码:
<%@include file="/libs/granite/ui/global.jsp"%>
全局还声明了Sling库。
<%@taglib prefix="sling" uri="https://sling.apache.org/taglibs/sling" %>
<ui:includeClientLib>
标记包含AEM html客户端库,该客户端库可以是js、css或主题库。 对于不同类型(例如js和css)的多个包含项,此标记需要在jsp中多次使用。 此标记是 [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)
服务接口的方便包装器。
它具有以下属性:
类别 — 以逗号分隔的客户端库类别列表。这将包括给定类别的所有Javascript和CSS库。 主题名称将从请求中提取。
等同于:com.adobe.granite.ui.clientlibs.HtmlLibraryManager#writeIncludes
主题 — 以逗号分隔的客户端库类别列表。这将包括给定类别的所有与主题相关的库(CSS和JS)。 主题名称将从请求中提取。
等同于:com.adobe.granite.ui.clientlibs.HtmlLibraryManager#writeThemeInclude
js — 以逗号分隔的客户端库类别列表。这将包括给定类别的所有Javascript库。
等同于:com.adobe.granite.ui.clientlibs.HtmlLibraryManager#writeJsInclude
css — 以逗号分隔的客户端库类别列表。这将包含给定类别的所有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标记库,脚本必须以以下代码开头:
<%@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"%>
它声明了sling、CQ和jstl taglibs,并公开了由 <cq:defineObjects />
标记定义的常规脚本对象。 这可缩短并简化组件的jsp代码。
<cq:text>
标记是一个方便的标记,用于在JSP中输出组件文本。
它具有以下可选属性:
属性 — 要使用的属性的名称。该名称相对于当前资源。
value — 用于输出的值。如果存在此属性,则会覆盖属性属性的使用。
oldValue — 用于差异输出的值。如果存在此属性,则会覆盖属性属性的使用。
escXml — 定义是否应将结果字 <>符串中的字符、&、“和”转换为相应的字符实体代码。默认值为 false。请注意,转义在可选格式后应用。
format — 可选的java.text.Format,用于设置文本格式。
noDiff — 禁止计算差异输出,即使存在差异信息也是如此。
tagClass — 将包围非空输出的元素的CSS类名称。如果为空,则不会添加任何元素。
tagName — 将包围非空输出的元素的名称。默认为DIV。
占位符 — 在编辑模式(即占位符)中用于null或空文本的默认值。请注意,默认检查在可选格式和转义之后执行,即按原样写入输出。 默认为:
<div><span class="cq-text-placeholder">¶</span></div>
默认 — 用于空或空文本的默认值。请注意,默认检查在可选格式和转义之后执行,即按原样写入输出。
如何在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>
标记会创建i18n本地化上下文并将其存储在javax.servlet.jsp.jstl.fmt.localizationContext
配置变量中。
它具有以下属性:
语言 — 用于检索资源包的区域设置语言。
source — 应从中获取区域设置的源。它可以设置为以下值之一:
静态 — 区域设置从属性(如果可 language
用)中获取,否则从服务器默认区域设置中获取。
page — 区域设置采用当前页面或资源的语言(如果可用),否则采用属性(如果可 language
用),否则采用服务器默认区域设置。
request — 区域设置是从请求区域设置( request.getLocale()
)中获取的。
自动 — 区域设置从属性(如果可 language
用)获取,否则从当前页面或资源的语言(如果可用)获取,或从请求获取。
如果未设置source
属性:
如果设置了language
属性,则source
属性将默认为“ static
”。
如果未设置language
属性,则source
属性将默认为auto
。
标准JSTL <fmt:message>
标记只能使用“内容包”。 按键查找消息的方式有两种:
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>
标记将资源包含到当前页面中。
它具有以下属性:
刷新
路径
resourceType
脚本
ignoreComponentHierarchy
示例:
<%@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>
?
<cq:include>
。<cq:include>
允许您在使用script属性时直接按名称包含脚本文件。这会考虑组件和资源类型继承,并且通常比严格遵循使用选择器和扩展的Sling脚本解析更简单。<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
主题 — 以逗号分隔的客户端库类别列表。这将包括给定类别的所有与主题相关的库(CSS和JS)。 主题名称将从请求中提取。
等同于:com.day.cq.widget.HtmlLibraryManager#
writeThemeInclude
js — 以逗号分隔的客户端库类别列表。这将包括给定类别的所有Javascript库。
等同于:com.day.cq.widget.HtmlLibraryManager#writeJsInclude
css — 以逗号分隔的客户端库类别列表。这将包含给定类别的所有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>
标记会公开以下经常使用的脚本对象,开发人员可以引用这些对象。 它还会公开由 <sling:defineObjects>
标记定义的对象。
componentContext
组件
currentDesign
currentPage
currentStyle
设计器
editContext
pageManager
pageProperties
属性
resourceDesign
resourcePage
requestName
responseName
resourceName
nodeName
logName
resourceResolverName
slingName
componentContextName
editContextName
propertiesName
pageManagerName
currentPageName
resourcePageName
pagePropertiesName
componentName
designerName
currentDesignName
resourceDesignName
currentStyleName
示例
<%@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>
标记将当前请求URL写入JspWriter。 两个标记 <cq:addParam>
和 <cq:removeParam>
可在此标记正文中使用,以在写入之前修改当前请求URL。
它允许您使用不同参数创建指向当前页面的链接。 例如,它允许您转换请求:
mypage.html?mode=view&query=something
到 mypage.html?query=something
.
使用addParam
或removeParam
只会更改给定参数的出现情况,所有其他参数都不会受到影响。
<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:requestURL>
标记中添加具有给定名称和值的请求参数。
它具有以下属性:
name
选定
示例:
<a title="filter results" href="<cq:requestURL><cq:addParam name="language" value="${bucket.value}"/></cq:requestURL>">${label} (${bucket.count})</a>
<cq:removeParam>
标记会从封闭的 <cq:requestURL>
标记中删除具有给定名称和值的请求参数。 如果未提供值,则删除所有具有给定名称的参数。
它具有以下属性:
name
示例:
<a href="<cq:requestURL><cq:removeParam name="language"/></cq:requestURL>">remove filter</a>
Sling标记库包含有用的Sling函数。
当您在脚本中使用Sling标签库时,脚本必须以以下代码开头:
<%@ taglib prefix="sling" uri="https://sling.apache.org/taglibs/sling/1.0" %>
当脚本中包含/libs/foundation/global.jsp
文件时,将自动声明sling taglib。
<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>
标记会公开以下经常使用的脚本对象,开发人员可以引用这些对象:
slingRequest
slingResponse
resourceResolver
.sling
资源
currentNode
日志
提供SLF4J日志记录器,用于从脚本(例如 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/>
JavaServer Pages标准标记库包含许多有用的标准标记。 核心、格式和函数标签由/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
文件后,可以使用c
、fmt
和fn
前缀访问这些标签。 JSTL的官方文档位于The Java EE 5 Tutorial - JavaServer Pages Standard Tag Library。