使用queryBuilder获取aem中特定属性的所有值

时间:2017-03-07 10:50:06

标签: cq5 aem

我想要使用QueryBuilder api在AEM中的特定路径下获取属性的所有值。 此属性可以包含单个或多个。 任何帮助将不胜感激!!

2 个答案:

答案 0 :(得分:4)

可以帮助您的示例。在下面,因为它只是用简单的JSP scriptlet编写的插图

 <%
Iterator<Resource> iter = resourceResolver.findResources("/jcr:root/content/geometrixx-outdoors//element(*, nt:unstructured)[(@imageRotate = '0' or @imageRotate = '1')]","xpath");
while (iter.hasNext()) {
    Resource child = iter.next();
    out.println("</br>"+child.getPath());
    Node node = child.adaptTo(Node.class);
    Property nProp = node.getProperty("imageRotate");

if(nProp.isMultiple()) // This condition checks for properties whose type is String[](String array)  
      {  
Value[] values = nProp.getValues();
    out.println(" :: This is a multi valued property ::");
    for (Value v : values) {
        out.println("</br>"+"Property Name = "+nProp.getName()+" ; Property Value= "+v.getString());
    }  
      }  
      else if(!nProp.getDefinition().isMultiple()){  
          out.println("</br>"+"Property Name = "+nProp.getName()+" ; Property Value= "+nProp.getString());
      }  
}
%>

在这里,我使用了Iterator<Resource> iter = resourceResolver.findResources(query,"xpath");,它可以为您提供与imageRotate路径下的/content/geometrixx-outdoors/属性匹配的查询结果,该路径包含单个和多值的组合,如下面的屏幕截图所示。< / p>

CRX Node

答案 1 :(得分:1)

使用查询构建器api无法直接获取属性。我建议你创建一个servlet资源,它需要pathproperty名称。

通过QueryBuilder使用给定路径获取jcr节点。然后,您需要遍历结果以检查节点的属性。一旦有了节点,就可以访问多个属性值。