将currentNode与设计对话框一起使用

时间:2013-09-27 23:26:49

标签: cq5 sling aem

我正在做一个简单的CQ包括我的组件。

<cq:include path="banner" resourceType="generic/components/content/banner" />

但我没有使用内容对话框,而是使用了设计对话框。我理解设计对话框属性都存储在 / etc / designs / default。所以如果我尝试访问当前节点对象I.E.使用方法:

<%= currentNode.getName() %>

我得到一个空指针异常。为什么会这样?是否还有设计对话框的节点。理想情况下我正在尝试使用:

<%= currentNode.getIdentifier() %>

但是发现我甚至无法访问currentNode它只是抛出一个空指针。有关解决此问题的任何提示,是否需要通过设计对话框获取currentNode的另一条路径?非常感谢任何帮助!

1 个答案:

答案 0 :(得分:4)

currentNode 对象包含请求的已解析JCR节点。 由于您使用的是设计对话框,因此您可以使用 currentDesign 对象访问所寻址资源的设计。并且为了访问存储在设计对话框中的属性,您可以使用 currentStyle 对象。

currentStyle.get("prop_name");
currentDesign.getId();

有关可用方法的信息,请参阅Style apiDesign api

由于我们有currentStyle对象,我们可以从中获取样式的路径,然后使用Session对象从该路径获取节点。之后,您可以对其执行所有节点操作。

Session session = resourceResolver.adaptTo(Session.class);
if(session.nodeExists(currentStyle.getPath())) {
    Node node = session.getNode(currentStyle.getPath());
    node.getIdentifier();
}

希望这有帮助。