タグライブラリ

Granite、CQ および Sling のタグライブラリを使用すると、テンプレートやコンポーネントの JSP スクリプトで使用する特定の機能にアクセスできます。

Granite タグライブラリ

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>

<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) サービスインターフェイスを囲む便利なラッパーです。

このタグの属性を以下に示します。

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 タグライブラリには便利な機能が用意されています。

スクリプトで 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>

<cq:text>タグは、JSP内のコンポーネントテキストを出力する便利なタグです。

このタグのオプションの属性を以下に示します。

property — 使用するプロパティの名前。この名前は現在のリソースを基準とした相対名です。

value — 出力に使用する値。この属性が存在する場合は、property 属性の使用が上書きされます。

oldValue — 差分出力に使用する値。この属性が存在する場合は、property 属性の使用が上書きされます。

escapeXml — 結果の文字列の文 <>字、&、'および"を、対応する文字エンティティコードに変換するかどうかを定義します。デフォルト値は false です。オプションの書式設定の後はエスケープが適用されます。

format — オプションのjava.text.Format。テキストの書式設定に使用します。

noDiff — 差分情報が存在する場合でも、差分出力の計算を行いません。

tagClass — 空でない出力を囲む要素のCSSクラス名。空の場合は、要素が追加されません。

tagName — 空でない出力を囲む要素の名前。デフォルト値は DIV です。

placeholder — 編集モードでnullまたは空のテキスト(プレースホルダー)に使用するデフォルト値。オプションの書式設定およびエスケープの後にデフォルトチェックが実行され、そのまま出力に書き込まれます。デフォルト値は次のとおりです。

<div><span class="cq-text-placeholder">&para;</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>

<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 つの処理で構成されます。

  1. 最初に、現在レンダリングされている基盤となるリソースの JCR プロパティが翻訳用に検索されます。これにより、JCR プロパティの値を編集するためのシンプルなコンポーネントのダイアログを定義できます。
  2. ノードにキーと完全に同じ名前のプロパティが含まれていない場合、フォールバックは、Sling要求( 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>

<cq:include>タグは、現在のページにリソースを含めます。

このタグの属性を以下に示します。

flush

  • ターゲットをインクルードする前に出力をフラッシュするかどうかを定義するブール値。

path

  • 現在の要求の処理にインクルードするリソースオブジェクトのパス。このパスが相対パスの場合は、スクリプトが特定のリソースをインクルードする現在のリソースのパスに追加されます。path と resourceType または script を指定する必要があります。

resourceType

  • インクルードするリソースのリソースタイプ。リソースタイプが設定されている場合、このパスはリソースオブジェクトの正確なパスである必要があります。この場合、パスへのパラメーター、セレクターおよび拡張子の追加はサポートされません。
  • インクルードするリソースがリソースに解決できない path 属性と共に指定されている場合、タグではパスとこのリソースタイプから合成リソースオブジェクトを作成できます。
  • path と resourceType または script を指定する必要があります。

script

  • インクルードする jsp スクリプト。path と resourceType または script を指定する必要があります。

ignoreComponentHierarchy

  • スクリプト解決の際にコンポーネントの階層を無視するかどうかを制御するブール値。true の場合は、検索パスだけが使用されます。

例:

<%@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>を使用する必要がありますか?

  • AEMコンポーネントを開発する場合は、Adobeで<cq:include>を使用することをお勧めします。
  • <cq:include> script属性を使用すると、スクリプトファイルを名前で直接含めることができます。これにより、コンポーネントとリソースタイプの継承が考慮されます。多くの場合、この方法はセレクターと拡張子を使用する Sling のスクリプト解決を厳守するよりも簡単です。

<cq:includeClientLib>

注意

<cq:includeClientLib> はAEM 5.6以降で非推奨(廃止予定)となっていま <ui:includeClientLib> す。代わりにを使用してください。

<cq:includeClientLib>タグは、AEM HTMLクライアントライブラリを含みます。このライブラリは、js、css、テーマライブラリのいずれかです。 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>

<cq:defineObjects>タグは、定期的に使用される次のスクリプトオブジェクトを公開し、開発者が参照できます。 また、 <sling:defineObjects>タグで定義されたオブジェクトも公開します。

componentContext

  • 要求の現在のコンポーネントのコンテキストオブジェクト(com.day.cq.wcm.api.components.ComponentContext インターフェイス)

component

  • 現在のリソースの現在の AEM コンポーネントのオブジェクト(com.day.cq.wcm.api.components.Component インターフェイス)

currentDesign

  • 現在のページの現在のデザインオブジェクト(com.day.cq.wcm.api.designer.Design インターフェイス)

currentPage

  • 現在の AEM WCM ページオブジェクト(com.day.cq.wcm.api.Page インターフェイス)

currentStyle

  • 現在のセルの現在のスタイルオブジェクト(com.day.cq.wcm.api.designer.Style インターフェイス)

designer

  • デザイン情報にアクセスするために使用するデザイナーオブジェクト(com.day.cq.wcm.api.designer.Designer インターフェイス)

editContext

  • AEM コンポーネントのコンテキストの編集オブジェクト(com.day.cq.wcm.api.components.EditContext インターフェイス)

pageManager

  • ページレベルの操作用のページマネージャーオブジェクト(com.day.cq.wcm.api.PageManager インターフェイス)

pageProperties

  • 現在のページのページプロパティオブジェクト(org.apache.sling.api.resource.ValueMap)

プロパティ

  • 現在のリソースのプロパティオブジェクト(org.apache.sling.api.resource.ValueMap)

resourceDesign

  • リソースページのデザインオブジェクト(com.day.cq.wcm.api.designer.Design インターフェイス)

resourcePage

  • リソースページオブジェクト(com.day.cq.wcm.api.Page インターフェイス)
  • このタグの属性を以下に示します。

requestName

  • sling から継承

responseName

  • sling から継承

resourceName

  • sling から継承

nodeName

  • sling から継承

logName

  • sling から継承

resourceResolverName

  • sling から継承

slingName

  • sling から継承

componentContextName

  • wcm に特有

editContextName

  • wcm に特有

propertiesName

  • wcm に特有

pageManagerName

  • wcm に特有

currentPageName

  • wcm に特有

resourcePageName

  • wcm に特有

pagePropertiesName

  • wcm に特有

componentName

  • wcm に特有

designerName

  • wcm に特有

currentDesignName

  • wcm に特有

resourceDesignName

  • wcm に特有

currentStyleName

  • wcm に特有

<%@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>

<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: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:removeParam>タグは、囲む <cq:requestURL>タグから、指定された名前と値を持つリクエストパラメーターを削除します。 値が指定されていない場合は、特定の名前を持つすべてのパラメーターが削除されます。

このタグの属性を以下に示します。

name

  • 削除するパラメーターの名前

例:

<a href="<cq:requestURL><cq:removeParam name="language"/></cq:requestURL>">remove filter</a>

Sling タグライブラリ

Sling タグライブラリには Sling の便利な機能が用意されています。

スクリプトで Sling タグライブラリを使用する場合は、スクリプトを次のコードで開始する必要があります。

<%@ taglib prefix="sling" uri="https://sling.apache.org/taglibs/sling/1.0" %>
メモ

/libs/foundation/global.jspファイルがスクリプトに含まれると、slingタグライブラリが自動的に宣言されます。

<sling:include>

<sling:include>タグは、現在のページにリソースを含めます。

このタグの属性を以下に示します。

フラッシュ

  • ターゲットをインクルードする前に出力をフラッシュするかどうかを定義するブール値。

resource

  • 現在の要求の処理にインクルードするリソースオブジェクト。resource または path を指定する必要があります。どちらも指定されている場合は、resource が優先されます。

パス

  • 現在の要求の処理にインクルードするリソースオブジェクトのパス。このパスが相対パスの場合は、スクリプトが特定のリソースをインクルードする現在のリソースのパスに追加されます。resource または path を指定する必要があります。どちらも指定されている場合は、resource が優先されます。

resourceType

  • インクルードするリソースのリソースタイプ。リソースタイプが設定されている場合、このパスはリソースオブジェクトの正確なパスである必要があります。この場合、パスへのパラメーター、セレクターおよび拡張子の追加はサポートされません。
  • インクルードするリソースがリソースに解決できない path 属性と共に指定されている場合、タグではパスとこのリソースタイプから合成リソースオブジェクトを作成できます。

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>

<sling:defineObjects>タグは、定期的に使用される次のスクリプトオブジェクトを公開し、開発者が参照できます。

slingRequest

  • HTTP 要求ヘッダー情報へのアクセスを提供する SlingHttpServletRequest オブジェクト。標準の HttpServletRequest を拡張します。また、Sling に特有の要素(リソース、パス情報、セレクターなど)へのアクセスを提供します。

slingResponse

  • サーバーで作成される HTTP 応答にアクセスを提供する SlingHttpServletResponse オブジェクト。現時点では、拡張元の HttpServletResponse と同じです。request
  • 純粋な HttpServletRequest である標準の JSP 要求オブジェクト。response
  • 純粋な HttpServletResponse である標準の JSP 応答オブジェクト。

resourceResolver

  • 現在の ResourceResolver オブジェクト。slingRequest.getResourceResolver() と同じです。

sling

  • SlingScriptHelper オブジェクト。スクリプト用の便利なメソッドが格納されています。主なメソッドは、他のリソースの応答をこの応答内にインクルードする(例:ヘッダーの html スニペットを埋め込む)ための sling.include('/some/other/resource') と、Sling で使用可能な OSGi サービス(スクリプト言語に応じたクラス表記)を取得するための sling.getService(foo.bar.Service.class) です。

resource

  • 処理する現在のリソースオブジェクト(要求の URL によって異なります)。slingRequest.getResource() と同じです。

currentNode

  • 現在のリソースが JCR ノードを指す場合(通常は Sling の場合)に、ノードオブジェクトへの直接アクセスを提供します。それ以外の場合、このオブジェクトは定義されません。

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/>

JSTL タグライブラリ

JavaServer Pages Standard Tag Libraryには、多くの便利な標準タグが含まれています。 以下のスニペットに示すように、コア、書式設定および関数のタグライブは/libs/foundation/global.jspによって定義されます。

/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ファイルを読み込んだ後、cfmtおよびfnプレフィックスを使用して、これらのタグライブラリにアクセスできます。 JSTL の公式ドキュメントは「The Java EE 5 Tutorial」の「JavaServer Pages Standard Tag Library」にあります。

このページ