2013-09-03 2 views
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() .... хороший particularry, когда у нас есть много узлов. Любое предложение?

ответ

2

Метод getNode(String) принимает относительный путь, поэтому в то время как имя ребенка является относительный путь и часто, как используется этот метод, вы можете также построить относительный путь:

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

Как вы можете видите, это довольно просто. Конечно, в JCR достаточно много путей; см. Section 3.4 в спецификации JCR 2.0 для полного определения того, что разрешено как по абсолютным, так и относительным путям.

Кстати, если у вас есть абсолютный путь, вы должны искать узел непосредственно из Session:

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

я препятствовать использованию узла API в моей команде разработки в JSP-х. Вместо этого интерфейс ValueMap разрешает доступ к любому свойству, в том числе по пути относительно страницы. Они не генерируют исключений, а также допускают значения по умолчанию, если они не найдены.

вы можете конвертировать ресурсы в ValueMap (и вы можете конвертировать Узлы, страницы в Ресурсные так же легко, как к узлу):

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