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.