Узел CQ Jcr, как разрешить Sling:OrderedFolder jcr:primarytype и получить дочерние узлы

введите здесь описание изображения

путь для родительской структуры выше: папка pdf -> /content/dam/example/corporate/pdf, а значение папки pdf jcr:primarytype равно Sling:OrderedFolder, так же как и две другие папки '2013' '2014'... введите здесь описание изображения

если родительский «pdf» является типом страницы, я точно знаю, как перебирать структуру страницы и получать информацию о свойствах дочернего узла с помощью jcr node api.

но, к сожалению, «pdf» - это тип упорядоченной папки ...

теперь мне нужно перебрать структуру и получить ВСЕ пути PDF-файлов и сохранить их в ArrayList, например, путь узла «2013exampleOne.pdf» равен /content/dam/example/corporate/pdf/2013exampleOne.pdf, а путь «2014examplePDFTwo.pdf» равен /content/dam/example/corporate/pdf/2014examplePDFTwo.pdf... и т.д... (этот список может серверировать другую часть приложения для загрузки pdf позже, но это не имеет ничего общего с моим текущим вопросом...)

вот мой собственный код для попытки (обратите внимание, это только часть моего сервлета):

   @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: пожалуйста, предоставьте пример кода, чтобы помочь, ура


person sefirosu    schedule 15.07.2014    source источник


Ответы (1)


Почему бы не использовать запрос?

ПУТЬ:

/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() дважды. Таким образом, вы продолжаете итерацию, не проверяя, есть ли следующий узел.

person Thomas    schedule 15.07.2014