1

AEM アプリケーションのヘッド ブロック内にスクリプト ファイルを含める条件を設定したいと考えています。

私の headlibs ファイルは、head ブロックを書き出す head.jsp に含まれています。

私がする必要があるのは、特定のノードがコンテンツに設定されているかどうかをテストすることです。設定されている場合は、スクリプト ファイルを含めます。

例えば。

<c:if test="${properties['contentNode']}">
    - include a script file.
</c:if>

しかし、範囲が間違っているようです。コンテンツノードを深く検索して、そこにあるかどうかを確認することはできないようです。

深く、相対的で、特定されていない検索が必要な理由は、この contentNode をページのどこにでも、どのレベルでも配置できるからです。

どんな助けでも大歓迎です。

4

2 に答える 2

2

デフォルトでValueMap propertiesは、currentNode のプロパティのみが読み込まれます。機能しproperties.get("child/grandChild/propName")ますが、直接アクセスするまでプロパティのマップに追加されません。また、パスを明示的に知っている必要があります。

また、${properties['propName']}ノードのプロパティである必要があります。したがって、子孫ノードのパスを参照している場合、基本的に、パスの最後の部分は、ノード自体の名前ではなく、ノードのプロパティ名である必要があります。

事前にパスがわからない場合は、Resource resourceを繰り返して、探しているプロパティを持つ目的のノードを見つける必要があります。

于 2013-10-14T02:21:31.073 に答える
0

Java コードでリソースを検索し、それを request 属性に設定してから、この属性を JSTL で使用します<c:if>

<%
    Resource myResource = resourceResolver.getResource("/some/absolute/path");

    // or use following if you want to check if some child node exists under
    // under current component:
    //
    // Resource myResource = resource.getChild("some/relative/path");

    request.setAttribute("myResource", myResource);
%>

<c:if test="${not empty myResource}">
...
</c:if>

スクリプトレットの使用はお勧めしません。リソースを見つけるためのロジックが複雑な場合は、それを適切な Java クラスに移動してください。

于 2013-10-02T14:30:08.433 に答える