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);