Granite、CQ和Sling標籤庫可讓您存取特定函式,以用於範本和元件的JSP指令碼。
Granite標籤庫包含實用的函式。
當您開發Granite UI元件的jsp指令碼時,建議在指令碼頂端加入下列程式碼:
<%@include file="/libs/granite/ui/global.jsp"%>
全域也會宣告Sling library。
<%@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/tw/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 —— 逗號分隔的客戶端庫類別清單。這將包含指定類別的所有主題相關程式庫(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中輸出元件文本。
它具有以下可選屬性:
property —— 要使用的屬性名稱。名稱是相對於當前資源的。
value —— 用於輸出的值。如果此屬性存在,則覆寫屬性的使用。
oldValue —— 用於比較輸出的值。如果此屬性存在,則覆寫屬性的使用。
escapeXml -定義產生字 <>串中的字元&、'和'是否應轉換為對應的字元實體代碼。預設值為false。 請注意,逸出符號會套用在選用格式設定之後。
format —— 用於設定文本格式的可選java.text.Format。
noDiff —— 隱藏比較輸出的計算,即使存在比較資訊也是如此。
tagClass —— 將包含非空輸出的元素的CSS類名。如果為空白,則不會新增任何元素。
tagName —— 將包含非空輸出的元素名稱。預設為DIV。
placeholder —— 用於編輯模式(即佔位符)中空文本的預設值。請注意,預設檢查是在可選格式設定和逸出後執行的,即按原樣寫入輸出。 預設為:
<div><span class="cq-text-placeholder">¶</span></div>
default —— 用於空文本或空文本的預設值。請注意,預設檢查是在可選格式設定後執行的,並逸出(即按原樣寫入輸出)。
有些範例說明如何在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()
)。
auto -語言環境從屬性取得(如 language
果可用),否則從當前頁或資源的語言取得(如果可用),從請求取得。
如果未設定source
屬性:
如果設定了language
屬性,則source
屬性預設為"static
。
如果未設定language
屬性,則source
屬性預設為auto
。
標準JSTL <fmt:message>
標籤只能使用"content bundle"。 按鍵查閱的訊息是兩倍:
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>
標籤將資源包含到當前頁中。
它具有以下屬性:
flash
路徑
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>
允許您在使用指令碼屬性時直接按指令碼檔案的名稱包含指令碼檔案。這會考慮元件與資源類型繼承,而且通常比使用選擇器與擴充功能嚴格符合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 —— 逗號分隔的客戶端庫類別清單。這將包含指定類別的所有主題相關程式庫(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
屬性名稱
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>
標籤中。
它具有以下屬性:
名稱
值
範例:
<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 Tag Library時,指令碼必須以下列程式碼開頭:
<%@ taglib prefix="sling" uri="https://sling.apache.org/taglibs/sling/1.0" %>
當/libs/foundation/global.jsp
檔案包含在指令碼中時,sling taglib會自動宣告。
<sling:include>
標籤將資源包含到當前頁中。
它具有以下屬性:
flash
資源
路徑
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 Logger,以從指令碼登入Sling記錄系統,例如 log.info("Executing my script")。
它具有以下屬性:
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標準標籤庫中找到。