JCR SQL-2 获取节点名称



>我正在研究AEM 6.3,想获取页面名称

从 [cq:Page] 中选择 * 其中后代节点("/内容/产品/轮廓/配件/乐队/头带")

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

您可以通过这种方式指定列约束,如标题、节点名称等 -

SELECT nodeSet.name, nodeset.title FROM [cq:Page] AS nodeSet WHERE ISDESCENDANTNODE("/content/Product/Silhouettes/Accessories/Bands/Headband")

注意:AEM(工具->查询)中的查询工具不会根据您提到的列列出查询结果,它只会列出节点路径。

您可以查看如何使用/etc/importers/bulkeditor.html或AEM小提琴工具根据列约束可视化查询结果。


如果要以编程方式实现此目的,可以使用问题中提到的相同查询,并使用javax.jcr.query.*javax.jcr.Node.*API 从查询结果中检索几乎任何属性。此处的本文应帮助你以编程方式实现此目的。

使用 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的任何版本,则应改用页面API。

在这种情况下,listChildren(Filter<Page> filter, boolean deep)方法将完成这项工作。

如果要筛选某种类型的页面,可以使用 PageFilter 参数。因此,如果您的页面查找算法没有额外的标准,您可能会传递 null 或新的空对象。

布尔参数:如果false则仅返回直接子页面,如果返回true将列出给定页面的所有后代页面。

因此,将为您提供相同最终结果的 SQL 查询的等效解决方案是:

Iterator<Page> rootPageIterator = rootPage.listChildren(null, true);

最新更新