2017-03-07 17 views
1

QueryBuilder APIを使用して、AEMの特定のパスのプロパティのすべての値をフェッチしたいシナリオがあります。 このプロパティは、単一または複数の値を持つことができます。 ご協力いただければ幸いです!queryBuilderを使用してaemの特定のプロパティのすべての値を取得します。

+1

私が正しく理解していれば**あなたは**コンテンツパスノードのリストを結果のクエリを探していますか?または**特定のコンテンツパス**のプロパティ値のみを取得する**。これまでのところAFAIKというクエリビルダを使用して、特定の検索一致のコンテンツパスを取得していました。 – VAr

答えて

1

クエリビルダーAPIを使用してプロパティを直接取得する方法はありません。私はpathpropertyという名前が必要なサーブレットリソースを作成することをお勧めします。

QueryBuilderで指定されたパスを使用してjcrノードを取得します。次に、結果をループしてノードのプロパティをチェックする必要があります。ノードがあれば、複数のプロパティ値にアクセスできます。

4

あなたに役立つ例。それだけで示したように、私はあなたに単一の組み合わせで構成さ/content/geometrixx-outdoors/パスの下imageRotateプロパティと一致するクエリ結果を出すことができたIterator<Resource> iter = resourceResolver.findResources(query,"xpath");を使用し、多値いる

ここ
<% 
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()); 
     } 
} 
%> 

簡単なJSPスクリプトレットで記述された例示のためのものであるとして、以下の通りです下のスクリーンショット。

CRX Node