1

我想在 AEM 应用程序的 head 块中设置包含脚本文件的条件。

我有我的 headlibs 文件,它包含在 head.jsp 中,它写出了我的 head 块。

我需要做的是测试是否在内容中设置了特定节点,如果是,则包含一个脚本文件。

例如。

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

我不鼓励使用 scriptlet - 如果查找资源的逻辑很复杂,请将其移至适当的 Java 类。

于 2013-10-02T14:30:08.433 回答