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、またはテーマライブラリにすることができます。 jsやcssなど、異なるタイプの複数の挿入タグの場合は、このタグをJSPで複数回使用する必要があります。 このタグは、 [com.adobe.granite.ui.clientlibs.HtmlLibraryManager](https://helpx.adobe.com/jp/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
テーマ — カンマ区切りのクライアントライブラリカテゴリのリスト。指定したカテゴリのテーマに関連するライブラリ(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
ファイルがスクリプトに含まれると、taglibが自動的に宣言されます。
AEM コンポーネントの jsp スクリプトを開発する場合は、スクリプトの先頭に次のコードをインクルードすることをお勧めします。
<%@include file="/libs/foundation/global.jsp"%>
sling、CQ、jstl taglibを宣言し、 <cq:defineObjects />
タグで定義されている、定期的に使用されるスクリプティングオブジェクトを公開します。 これにより、コンポーネントの jsp コードが短縮および簡略化されます。
<cq:text>
タグは、JSP内のコンポーネントテキストを出力する便利なタグです。
このタグのオプションの属性を以下に示します。
property — 使用するプロパティの名前。この名前は現在のリソースを基準とした相対名です。
value — 出力に使用する値。この属性が存在する場合は、property 属性の使用が上書きされます。
oldValue - diff出力に使用する値。この属性が存在する場合は、property 属性の使用が上書きされます。
escapeXml — 結果の文字列内の文字 <>、&、'、'を、対応する文字エンティティコードに変換するかどうかを定義します。デフォルト値は false です。オプションの書式設定の後はエスケープが適用されます。
format — オプションのjava.text.Format。テキストの書式設定に使用します。
noDiff - diff情報が存在する場合でも、diff出力の計算を省略します。
tagClass — 空でない出力を囲む要素のCSSクラス名。空の場合は、要素が追加されません。
tagName — 空でない出力を囲む要素の名前。デフォルト値は DIV です。
placeholder — 編集モードでnullまたは空のテキスト(プレースホルダーなど)に使用するデフォルト値。オプションの書式設定およびエスケープの後にデフォルトチェックが実行され、そのまま出力に書き込まれます。デフォルト値は次のとおりです。
<div><span class="cq-text-placeholder">¶</span></div>
default -nullまたは空のテキストに使用するデフォルト値。オプションの書式設定およびエスケープの後にデフォルトチェックが実行され、そのまま出力に書き込まれます。
<cq:text>
タグをJSPで使用する例をいくつか示します。
<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>
タグの言語およびソース属性によって定義されます。<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、またはテーマライブラリにすることができます。 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
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>
タグから削除します。 値が指定されていない場合は、特定の名前を持つすべてのパラメーターが削除されます。
このタグの属性を以下に示します。
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>
タグは、現在のページにリソースを含めます。
このタグの属性を以下に示します。
フラッシュ
resource
path
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 Standardタグライブラリには、便利なタグや標準タグがたくさん含まれています。 taglibの中核となる、書式設定と関数は、次のスニペットのように/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
のプリフィックスを使用して、これらのtaglibにアクセスできます。 JSTL の公式ドキュメントは「The Java EE 5 Tutorial」の「JavaServer Pages Standard Tag Library」にあります。