在adobe cq5中检索节点的最佳方法是什么?

时间:2014-12-12 08:13:20

标签: cq5 aem sling

有哪些不同的方法可以在adobe cq5中检索节点,而不是那些喜欢的节点。

我知道三种方法只有一种是通过会话,请求,另一种是通过resourceResolver。 这是那些..

Node rootNode = session.getNode(path);  
by request
Node currentNode = request.getResource().adaptTo(Node.class);

by resourceResolver

    String resourcePath = "path/to/resource";
    Node.node = resourceResolver.getResource(resourcePath).adaptTo(Node.class);

其中哪一个是检索的最佳方式,为什么?

2 个答案:

答案 0 :(得分:2)

首先,我们不鼓励这样提出问题,因为它触发了基于意见的答案。尽管如此,我仍尽力做到客观。我认为这取决于用例,例如您希望在代码中获取节点的位置:

  • 如果您已经在servlet中, request.getResource().adaptTo(Node.class)可能是最多的 直截了当的方式。
  • 如果您已经拥有jcr Session,则最容易使用。{li> getNode(path)方法
  • 如果您已经ResourceResolver getResource(path)resolve(path)也可以。

我个人更喜欢使用Sling API而不是JCR,因此我通常使用Resources,因此我主要使用ResourceResolver或其适配器:PageManagerTagManager等。

我甚至认为内部所有内容都以session.getNode(path)结尾,因为ResourceResolver依赖于Session(您可以根据request.getResource()进行调整)resolve(path)可能使用{{1}} {1}}方法。

答案 1 :(得分:0)

没有“最佳方式”。如果你已经有一个NODE对象,那么如果你想说...所有孩子那么就有listChildren()。真的最好的方法是用例。

真正的问题是你为什么要特别想要一个NODE。除非您在JCR中创建数据,否则通常不需要节点接口。 99%的时间系统为您处理节点创建,因此您正在读取数据,在这种情况下,resource.adaptTo(ValueMap.class)可能是您最好的选择。

如果你添加更多关于为什么关注这个和背景的细节,我可以帮助你。