2017-03-07 139 views
1

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

+1

如果我理解正确**你在找这将导致内容的路径列表中的节点查询**?或者**仅检索特定内容路径**的属性值。到目前为止,查询生成器用于检索特定搜索匹配的内容路径。 – VAr

回答

1

没有直接的方法来使用查询构建器API来获取属性。我建议你创建一个servlet资源,它需要一个pathproperty的名字。

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

4

可以帮助你的例子。其次,作为它只是一个写在简单的JSP小脚本说明

<% 
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");,可以给你这下/content/geometrixx-outdoors/路径imageRotate财产由单一的组合相匹配的查询结果和多值如图所示在下面的截图。

CRX Node