2014-07-15 8 views
0

enter image description hereCQ JCR 노드는 어떻게 슬링를 해결하려면 OrderedFolder JCR : 인 프라이 얻을 아이들은

상기 구조의 부모에 대한 경로 노드 : PDF 폴더입니다 ->/content/dam/example/corporate/pdfjcr:primarytype의 PDF 폴더의 값은 그렇게, Sling:OrderedFolder입니다 다른 두 개의 폴더 '2013' '2014'... enter image description here

부모 경우 'PDF'는 페이지 유형이, 난 페이지 구조를 반복하고 JCR 노드를 사용하여 아이들에게 노드의 속성 정보를 검색하는 방법을 정확히 알고 api.

하지만 불행히도 'PDF'는 orderedfolder 유형은 ...

내가되면, 구조를 반복하고 모든 PDF 파일의 경로를 검색하고, 예를 들어, ArrayList에 2013exampleOne '의 경로를 저장하기 위해 지금 필요한

.pdf '노드가 /content/dam/example/corporate/pdf/2013exampleOne.pdf, 이고 경로가'2014examplePDFTwo.pdf '인 경우 /content/dam/example/corporate/pdf/2014examplePDFTwo.pdf ... 등입니다.이 목록은 나중에 pdf를 다운로드 할 수있는 응용 프로그램의 다른 부분을 서버 할 수 있지만 현재의 질문과 관련이 없습니다 ...)

여기 내 attemping 코드입니다 (제발, 이것은 내 서블릿의 일부일뿐입니다) :

다시 한 번
@Override 
     protected void doGet(final SlingHttpServletRequest request, 
       final SlingHttpServletResponse response) throws ServletException, 
       IOException { 
....//some more code 
.... 
.... 
.... 
      final ResourceResolver resourceResolver = request.getResourceResolver(); 
      Node pdfJcrNode = resourceResolver.resolve("/content/dam/example/corporate/pdf").adaptTo(Node.class); 

      NodeIterator yearChildrenNodes; 
      try { 
       yearChildrenNodes = pdfJcrNode.getNodes(); 
       while(yearChildrenNodes.hasNext()){ 
        Node yearItemNode = yearChildrenNodes.nextNode(); 
        while(yearItemNode.getNodes().hasNext()){ 
         String pdfNodeAssetString = yearItemNode.getNodes().nextNode().getProperty("jcr:primaryType").getString(); 
         if(pdfNodeAssetString.equals("dam:Asset")){ 
          pdfPathList.add(yearItemNode.getNodes().nextNode().getPath().toString()); 
         } 
        } 
       } 
      } catch (RepositoryException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
.... 
.... 
.... 
....//some more code 
} 

, 상위 폴더 'PDF'의 경로는 /content/dam/example/corporate/pdf

나에게 도움이되는 어떤 제안이? 감사합니다

ps : 도움을주기위한 코드 예제를 제공하십시오.

답변

1

왜 쿼리를 사용하지 않습니까?

XPATH :

/jcr:root/content/dam/example/corporate/pdf//*[jcr:primaryType='dam:Asset'] 

당신은이 같은 QueryManager를 사용할 수 있습니다

Session session = resourceResolver.adaptTo(Session.class) 
QueryManager qm = session.getWorkspace().getQueryManager(); 
Query q = qm.createQuery("/jcr:root/content/dam/example/corporate/pdf//*[jcr:primaryType='dam:Asset']", "xpath"); 
QueryResult result = q.execute(); 
NodeIterator nIt = result.getNodes(); 

을이 사용하면 노드를 반복 할 수 있습니다.

코드에 작은 쪽 메모가 있으면 nextNode()를 두 번 사용하고 있습니다. 따라서 nextNode가 있는지 확인하지 않고 계속 반복합니다.

+0

ye, 더 나은 ..x – seph