我正在aem 6.3上工作,想得到页面名
从cq: ISDESCENDANTNODE("/content/Product/Silhouettes/Accessories/Bands/Headband")页面选择*
如果需要使用sql-2检索节点的名称(),如何实现?
发布于 2018-05-08 04:01:58
您可以这样指定列约束,如标题、节点名称等-
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小提琴工具根据列约束可视化查询结果。
如果您想以编程方式实现这一点,您可以使用问题中提到的相同的查询,并使用javax.jcr.query.*和javax.jcr.Node.* API从查询结果中检索几乎任何属性。本文这里应该帮助您通过编程实现这一点。
发布于 2018-05-08 07:25:43
使用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());
}但是,请注意,如果您使用的版本高于CQ5.6,则应该使用页API。
在这种情况下,listChildren(Filter<Page> filter, boolean deep)方法将完成这项工作。
如果要筛选某些类型的页面,则可以使用PageFilter参数。因此,如果页面查找算法没有额外的条件,则可以传递null或新的空对象。
布尔参数:如果false只返回直接子页面,如果true将列出给定页面的所有子代页。
因此,将为您提供相同结果的SQL查询的等效解决方案是:
Iterator<Page> rootPageIterator = rootPage.listChildren(null, true);
https://stackoverflow.com/questions/50221718
复制相似问题