2013-10-02 52 views
1

我想在AEM應用程序中將頭文件包含在腳本文件中。使用JSP深入搜索/遞歸搜索AEM/CQ中的節點

我有我的headlibs文件,它包含在head.jsp中,它寫出了我的頭塊。

我需要做的是測試是否在內容中設置了特定節點,如果是,則包含腳本文件。

例如。

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

但是範圍看起來不對。它似乎無法深入搜索任何內容節點,並檢查它是否存在。

我需要一個深入的,相對的,非特定的搜索的原因是,這個contentNode可以放在頁面的任何位置,任何級別。

任何幫助將不勝感激。

回答

2

默認情況下,ValueMap properties將僅填充currentNode的屬性。儘管properties.get("child/grandChild/propName")可以工作,但直接訪問之前不會將其添加到屬性圖中。它需要你明確地知道路徑。

另外,${properties['propName']}必須是節點上的屬性。因此,如果您引用了後代節點的路徑,那麼基本上,路徑的最後部分必須是節點上的屬性名稱,而不是節點本身的名稱。

如果您事先不知道路徑,您將需要Resource resource進行迭代並找到具有要搜索的屬性的所需節點。

0

查找在Java代碼中的資源,將其設置爲請求屬性,然後在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類。