2017-03-07 135 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