使用JSP深入搜索/递归搜索AEM / CQ中的节点

时间:2013-10-02 13:54:25

标签: jsp cq5 aem

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

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

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

例如。

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

但范围似乎不对。它似乎无法深入搜索任何内容节点,并检查它是否存在。

我需要深入,相对,非特定搜索的原因是此contentNode可以放置在页面的任何位置的任何位置。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

默认情况下,ValueMap properties只会填充currentNode的属性。虽然properties.get("child/grandChild/propName")可以使用,但在直接访问之前它不会添加到属性映射中。它要求您明确了解路径。

此外,${properties['propName']}必须是节点上的属性。因此,如果要引用后代节点的路径,从根本上说,路径的最后部分必须是节点上的属性名称,而不是节点本身的名称。

如果您事先不知道路径,则需要Resource resource进行迭代,找到具有您要搜索的属性的所需节点。

答案 1 :(得分: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类。