2

我正在使用 aem 6.3 并想获取页面名称

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

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

4

2 回答 2

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 或新的空对象。

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

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

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

于 2018-05-08T07:25:43.777 回答
0

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

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

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

您可以查看使用/etc/importers/bulkeditor.htmlAEM fiddle工具来可视化基于列约束的查询结果。


如果您想以编程方式实现此目的,您可以使用您在问题中提到的相同查询,并使用javax.jcr.query.*APIjavax.jcr.Node.*从查询结果中检索几乎任何属性。此处的这篇文章应该可以帮助您以编程方式实现这一目标。

于 2018-05-08T04:01:58.010 回答