1

假设我有以下结构

myPage
jcr:content
  ->parContent
      ->myComponent

什么是一种优雅的方法来查找myComponent是否myPage path已知?

我使用以下内容:

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().... 很好的特殊性。有什么建议吗?

4

2 回答 2

2

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

Node result = currentNode.getNode("jcr:content/parContent/myComponent");

如您所见,它非常简单。当然,JCR 中的路径非常强大。请参阅JCR 2.0 规范中的第 3.4 节,了解绝对路径和相对路径中允许的内容的完整定义。

顺便说一句,如果您有绝对路径,则必须直接从以下位置查找节点Session

Node result = mySession.getNode("/some/absolute/path/to/a/node");
于 2013-09-03T12:13:28.017 回答
0

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

您可以将 Resources 转换为 ValueMap(您可以像转换 Node 一样轻松地将 Nodes、Pages 转换为 Resource):

ValueMap vm = resource.adaptTo(ValueMap.class);
于 2013-09-04T19:01:32.177 回答