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/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标签库,脚本必须开始以下代码:
<%@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标语,并公开由 <cq:defineObjects />
标签定义的常规脚本对象。 这缩短了并简化了组件的jsp代码。
<cq:text>
标签是一个方便的标签,它以JSP输出组件文本。
它具有以下可选属性:
property —— 要使用的属性的名称。该名称相对于当前资源。
value —— 用于输出的值。如果存在此属性,则会覆盖属性的使用。
oldValue —— 用于差异输出的值。如果存在此属性,则会覆盖属性的使用。
escapeXml -定义生成字符串 <>中的字符、&、'和"是否应转换为相应的字符实体代码。默认值为 false。请注意,转义在可选格式设置后应用。
format -用于设置文本格式的可选java.text.Format。
noDiff -隐含差异输出的计算,即使存在差异信息也是如此。
tagClass —— 将环绕非空输出的元素的CSS类名。如果为空,则不添加任何元素。
tagName —— 将包含非空输出的元素的名称。它默认为DIV。
占位符 -用于编辑模式(即占位符)中空或空文本的默认值。请注意,默认检查是在可选格式和转义之后执行的,即按原样写入输出。 默认为:
<div><span class="cq-text-placeholder">¶</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>
标签创建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>
标记只能使用“内容捆绑”。 按键查找消息的方式有两倍:
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
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>
标记公开以下常用脚本对象,这些对象可由开发人员引用。 它还公开由 <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
value
示例:
<a title="filter results" href="<cq:requestURL><cq:addParam name="language" value="${bucket.value}"/></cq:requestURL>">${label} (${bucket.count})</a>
<cq:removeParam>
标签从封闭的 <cq:requestURL>
标签中删除具有给定名称和值的请求参数。 如果未提供任何值,则删除所有具有给定名称的参数。
它具有以下属性:
名称
示例:
<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记录器,用于从脚本中登录到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/>
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的官方文档位于Java EE 5教程- JavaServer Pages标准标记库。