Granite、CQ および Sling のタグライブラリを使用すると、テンプレートやコンポーネントの JSP スクリプトで使用する特定の機能にアクセスできます。
Granite タグライブラリには便利な機能が用意されています。
Granite UI コンポーネントの jsp スクリプトを開発する場合は、スクリプトの先頭に次のコードをインクルードすることをお勧めします。
<%@include file="/libs/granite/ui/global.jsp"%>
global では、Sling ライブラリも宣言します。
<%@taglib prefix="sling" uri="https://sling.apache.org/taglibs/sling" %>
<ui:includeClientLib>
タグは、AEM html クライアントライブラリをインクルードします。js、css または theme の各ライブラリを指定できます。異なるタイプ(例: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)
サービスインターフェイスを囲む便利なラッパーです。
このタグの属性を以下に示します。
categories - クライアントライブラリのカテゴリのコンマ区切りのリスト。指定したカテゴリの 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
themed -テーマの設定されたライブラリまたは設定されていないライブラリのみインクルードすることを示すフラグ。省略すると、どちらのライブラリもインクルードされます。純粋な 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
ファイルがインクルードされると、タグライブラリが自動的に宣言されます。
AEM コンポーネントの jsp スクリプトを開発する場合は、スクリプトの先頭に次のコードをインクルードすることをお勧めします。
<%@include file="/libs/foundation/global.jsp"%>
このコードは sling、cq および jstl の各タグライブラリを宣言し、 <cq:defineObjects />
タグで定義される、定期的に使用するスクリプトオブジェクトを公開します。これにより、コンポーネントの jsp コードが短縮および簡略化されます。
<cq:text>
タグは、JSP 内のコンポーネントのテキストを出力する便利なタグです。
このタグのオプションの属性を以下に示します。
property - 使用するプロパティの名前。この名前は現在のリソースを基準とした相対名です。
value - 出力に使用する値。この属性が存在する場合は、property 属性の使用が上書きされます。
oldValue - 差分出力に使用する値。この属性が存在する場合は、property 属性の使用が上書きされます。
escapeXml - 結果の文字列内の文字 <、>、&、' および " を対応する文字エンティティコードに変換する必要があるかどうかを定義します。デフォルト値は false です。オプションの書式設定の後はエスケープが適用されます。
format - テキストの書式設定に使用するオプションの java.text 形式。
noDiff - 差分情報が存在する場合でも、差分出力の計算をおこないません。
tagClass - 空でない出力を囲む要素の CSS クラス名。空の場合は、要素が追加されません。
tagName - 空でない出力を囲む要素の名前。デフォルト値は DIV です。
placeholder - 編集モードで null または空のテキストに使用するデフォルト値(プレースホルダー)。オプションの書式設定およびエスケープの後にデフォルトチェックが実行され、そのまま出力に書き込まれます。デフォルト値は次のとおりです。
<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
設定変数に格納します。
このタグの属性を以下に示します。
language - リソースバンドルを取得するロケールの言語。
source - ロケールの取得元。次のいずれかの値に設定できます。
static - ロケールが language
属性から取得されます(使用可能な場合)。それ以外の場合は、サーバーのデフォルトのロケールから取得されます。
page - ロケールが現在のページまたはリソースの言語から取得されます(使用可能な場合)。取得できない場合は、language
属性から取得されます(使用可能な場合)。この属性からも取得できない場合は、サーバーのデフォルトのロケールから取得されます。
request - ロケールがリクエストロケール(request.getLocale()
)から取得されます。
auto - ロケールが language
属性から取得されます(使用可能な場合)。取得できない場合は、現在のページまたはリソースの言語から取得されます(使用可能な場合)。この言語からも取得できない場合は、リクエストから取得されます。
source
属性が設定されていない場合:
language
属性が設定されている場合は、source
属性のデフォルト値が `` static
になります。
language
属性が設定されていない場合は、source
属性のデフォルト値が auto
になります。
「コンテンツバンドル」は単純に標準の JSTL <fmt:message>
タグで使用できます。キーによるメッセージのルックアップは次の 2 つの処理で構成されます。
SlingHttpServletRequest.getResourceBundle(Locale)
)。このバンドル用の言語またはロケールは、<cq:setContentBundle>
タグの language 属性および source 属性で定義されます。<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>
タグは、現在のページにリソースをインクルードします。
このタグの属性を以下に示します。
flush
path
resourceType
script
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 または theme の各ライブラリを指定できます。異なるタイプ(例:js と css)の複数のインクルードがある場合は、このタグを jsp で複数回使用する必要があります。このタグは、com.day.cq.widget.HtmlLibraryManager
サービスインターフェイスを囲む便利なラッパーです。
このタグの属性を以下に示します。
categories - クライアントライブラリのカテゴリのコンマ区切りのリスト。指定したカテゴリの 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
themed -テーマの設定されたライブラリまたは設定されていないライブラリのみインクルードすることを示すフラグ。省略すると、どちらのライブラリもインクルードされます。純粋な 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
component
currentDesign
currentPage
currentStyle
designer
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 に書き込みます。2 つのタグ( <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 タグライブラリが自動的に宣言されます。
<sling:include>
タグは、現在のページにリソースをインクルードします。
このタグの属性を以下に示します。
フラッシュ
resource
パス
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
log
スクリプト内から Sling ログシステムへのログ記録のための SLF4J ロガーを提供します。例えば、log.info("Executing my script") のように指定します。
このタグの属性を以下に示します。
requestName
responseName
nodeName
logName 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」にあります。