在Adobe Experience Manager(AEM)中,QueryBuilder
是一个用于构建和执行查询的强大工具,常用于检索满足特定条件的节点(Nodes)。要获取某个特定属性的所有值,可以使用 QueryBuilder
来构建相应的查询。以下是如何使用 QueryBuilder
获取特定属性所有值的步骤和示例:
QueryBuilder
创建一个查询请求对象。select
字段,指定要检索的属性。以下是一个使用 QueryBuilder
获取属性 jcr:title
所有不同值的示例(假设使用的是 Java):
import javax.jcr.Session;
import javax.jcr.query.Query;
import javax.jcr.query.QueryResult;
import org.apache.sling.api.scripting.SlingBindings;
import org.apache.sling.scripting.jsp.util.TagUtil;
import com.day.cq.search.QueryBuilder;
import com.day.cq.search.result.SearchResult;
import java.util.HashSet;
import java.util.Set;
// 获取当前的JCR Session
Session session = ...; // 通过资源解析器或其他方式获取
// 获取 QueryBuilder 实例
QueryBuilder queryBuilder = resourceResolver.adaptTo(QueryBuilder.class);
// 定义查询
Map<String, String> params = new HashMap<>();
params.put("type", "nt:base"); // 查询所有节点类型为 nt:base 的节点
params.put("p.properties", "jcr:title"); // 指定要检索的属性
params.put("p.limit", "-1"); // 设置返回结果的数量限制为无限制
// 执行查询
SearchResult result = queryBuilder.createQuery(params, session);
// 处理结果并收集 jcr:title 的所有不同值
Set<String> titles = new HashSet<>();
for (Hit hit : result.getHits()) {
ValueMap properties = hit.getProperties();
String title = properties.get("jcr:title", String.class);
if (title != null) {
titles.add(title);
}
}
// 输出所有不同的 jcr:title 值
for (String title : titles) {
System.out.println(title);
}
如果您更倾向于使用 AEM 提供的 REST API 或 GraphQL 接口来获取属性值,也可以实现类似的功能:
AEM 的 Sling Model Exporter 可以将资源导出为 JSON,您可以通过 HTTP GET 请求获取特定属性的值。例如:
GET /content/path/to/resource.json?props=jcr:title
然后解析返回的 JSON 数据以提取 jcr:title
的值。
如果您的 AEM 实例启用了 GraphQL,可以编写查询来获取特定属性的所有值。例如:
query {
allNodes {
edges {
node {
jcrTitle
}
}
}
}
然后处理 GraphQL 响应以提取 jcrTitle
的所有不同值。
Set
集合(如上例所示)来自动去重。领取专属 10元无门槛券
手把手带您无忧上云