jcr sql-2获取节点名称

时间:2018-05-07 20:09:42

标签: aem jcr jcr-sql2

我正在使用6.3版本,希望获得页面名称

SELECT * FROM [cq:Page] WHERE ISDESCENDANTNODE(" / content / Product / Silhouettes / Accessories / Bands / Headband")

如果我需要使用sql-2检索节点名称,我该如何实现?

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.htmlAEM 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);