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

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

если родительский pdf - это тип страницы, я точно знаю, как перебирать структуру страницы и получать информацию о свойствах дочернего узла с помощью jcr-узла 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: пожалуйста, приведите пример кода, чтобы помочь, ура

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.

Другие вопросы по тегам