Java 搜索深层节点

Java 搜索深层节点,java,aem,jcr,Java,Aem,Jcr,假设我有以下结构 myPage jcr:content ->parContent ->myComponent 如果已知myPage路径,那么查找myComponent的优雅方法是什么 我使用以下方法: private Node myNode(String myPagePath){ ResourceResolver resourceResolver = request.getResourceResolver(); Resource resource =

假设我有以下结构

myPage
jcr:content
  ->parContent
      ->myComponent
如果已知
myPage路径
,那么查找
myComponent
的优雅方法是什么

我使用以下方法:

private Node myNode(String myPagePath){
    ResourceResolver resourceResolver = request.getResourceResolver();
    Resource resource = resourceResolver.getResource(myPagePath);
    final Node currentNode = resource.adaptTo(Node.class);

    return currentNode.getNode("jcr:content").getNode("parContent").getNode("myComponent");
}
我找不到getNode()。getNode()。。。。特别是当我们有很多节点的时候。有什么建议吗?

getNode(String)方法接受相对路径,因此,虽然子名称是相对路径,并且经常使用此方法,但您也可以构造相对路径:

Node result = currentNode.getNode("jcr:content/parContent/myComponent");
正如你所见,这很简单。当然,路径在JCR中非常强大;有关绝对路径和相对路径中允许的内容的完整定义,请参见JCR2.0规范中的

顺便说一句,如果您有绝对路径,则必须直接从
会话中查找节点:

Node result = mySession.getNode("/some/absolute/path/to/a/node");

我不鼓励我的开发团队在JSP中使用节点API。相反,ValueMap接口允许访问任何属性,包括相对于页面的路径上的属性。它们不会抛出异常,如果找不到,也允许使用默认值

您可以将资源转换为ValueMap(并且您可以像转换节点一样轻松地将节点、页面转换为资源):

ValueMap vm = resource.adaptTo(ValueMap.class);