有哪些不同的方法可以在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);
其中哪一个是检索的最佳方式,为什么?
答案 0 :(得分:2)
首先,我们不鼓励这样提出问题,因为它触发了基于意见的答案。尽管如此,我仍尽力做到客观。我认为这取决于用例,例如您希望在代码中获取节点的位置:
request.getResource().adaptTo(Node.class)
可能是最多的
直截了当的方式。Session
,则最容易使用。{li>
getNode(path)
方法ResourceResolver
getResource(path)
或resolve(path)
也可以。我个人更喜欢使用Sling API而不是JCR,因此我通常使用Resources,因此我主要使用ResourceResolver
或其适配器:PageManager
,TagManager
等。
我甚至认为内部所有内容都以session.getNode(path)
结尾,因为ResourceResolver
依赖于Session
(您可以根据request.getResource()
进行调整)resolve(path)
可能使用{{1}} {1}}方法。
答案 1 :(得分:0)
没有“最佳方式”。如果你已经有一个NODE对象,那么如果你想说...所有孩子那么就有listChildren()。真的最好的方法是用例。
真正的问题是你为什么要特别想要一个NODE。除非您在JCR中创建数据,否则通常不需要节点接口。 99%的时间系统为您处理节点创建,因此您正在读取数据,在这种情况下,resource.adaptTo(ValueMap.class)可能是您最好的选择。
如果你添加更多关于为什么关注这个和背景的细节,我可以帮助你。