我正在使用 aem 6.3 并想获取页面名称
SELECT * FROM [cq:Page] WHERE ISDESCENDANTNODE("/content/Product/Silhouettes/Accessories/Bands/Headband")
如果我需要使用 sql-2 检索节点的名称,我该如何实现?
使用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);
您可以通过这种方式指定列约束,如标题、节点名称等 -
SELECT nodeSet.name, nodeset.title
FROM [cq:Page] AS nodeSet
WHERE ISDESCENDANTNODE("/content/Product/Silhouettes/Accessories/Bands/Headband")
注意:AEM中的查询工具(Tools -> Query)不会根据你提到的列列出查询结果,它只会列出节点路径。
您可以查看使用/etc/importers/bulkeditor.html
或AEM fiddle工具来可视化基于列约束的查询结果。
如果您想以编程方式实现此目的,您可以使用您在问题中提到的相同查询,并使用javax.jcr.query.*
APIjavax.jcr.Node.*
从查询结果中检索几乎任何属性。此处的这篇文章应该可以帮助您以编程方式实现这一目标。