我正在使用6.3版本,希望获得页面名称
SELECT * FROM [cq:Page] WHERE ISDESCENDANTNODE(" / content / Product / Silhouettes / Accessories / Bands / Headband")
如果我需要使用sql-2检索节点名称,我该如何实现?
答案 0 :(得分:0)
您可以通过这种方式指定标题,节点名称等列约束 -
SELECT nodeSet.name, nodeset.title
FROM [cq:Page] AS nodeSet
WHERE ISDESCENDANTNODE("/content/Product/Silhouettes/Accessories/Bands/Headband")
注意:AEM中的查询工具(工具 - &gt;查询)不会根据您提到的列列出查询结果,它只会列出节点路径。< / p>
您可以使用/etc/importers/bulkeditor.html
或AEM fiddle工具查看基于列约束的查询结果。
如果您想以编程方式实现此目标,可以使用与问题中提到的查询相同的查询,并使用javax.jcr.query.*
和javax.jcr.Node.*
API来检索任何问题。来自查询结果的属性。本文here应该可以帮助您以编程方式实现此目的。
答案 1 :(得分:0)
使用ResourceResolver API执行并获取查询结果:
final Iterator<Resource> pagesIterator = resolver.findResources('<your_query_here>', javax.jcr.query.Query.JCR_SQL2);
while (pagesIterator.hasNext()) {
final Resource pageResource = pagesIterator.next();
LOG.info(pageResource.getName());
}
但请注意,如果您使用的是高于CQ 5.6的任何版本,则应使用Page API。
在这种情况下,listChildren(Filter<Page> filter, boolean deep)
方法将完成这项工作。
如果要过滤某种页面,可以使用PageFilter参数。因此,如果没有额外的页面查找算法标准,您可以传递null或新的空对象。
布尔参数:if false
只返回直接子页面,如果true
列出给定页面的所有后代页面。
因此,SQL Query的等效解决方案将为您提供相同的最终结果:
Iterator<Page> rootPageIterator = rootPage.listChildren(null, true);