0

私のcq5コンテンツ構造は....

Content
  ---mywebsite
           ------base
                    -----us
                          --- en
                                ----pageOne
                                ----pageTwo
                                ----pageThree
                                ----pageFour
                                         ----cq:content
                                                  ----par
                                                        ----pageFourNew

「pageFourNew」には約 500 個のプロパティがあります。ここで、"pageFourNew" のすべてのプロパティを取得し、それらの値を更新する必要があります。

たとえば、私が持っている場合:

property=prop1 
value = prop1 value

value = value+"some string value append"私はそれを実行してリポジトリに保存したいと考えています。

私はこれをプログラム的に行いたいと思っています。

解決策やアイデアがあれば共有してください。

4

2 に答える 2

2

PropertyIterator を使用してすべてのプロパティを反復処理し、ノード API の setProperty() メソッドを使用して新しい値を設定し、jcr セッションを使用して値を永続化してこれを実行できます。サンプルコード:

PropertyIterator propertyIterator = pageFourNew.getProperties();
while (propertyIterator.hasNext()) {
    Property property = propertyIterator.nextProperty();
    pageFourNew.setProperty(property.getName(),
        property.getValue().getString() + "");
jcrSession.save();}
于 2016-02-10T04:14:25.037 に答える
1

上記で提案したように、これは JCR レベルで簡単に実行できます。しかし、CQの実践とこのブログによると

リソース管理のオーバーヘッドを回避するために、JCR レベルではなく Sling レベルで運用することをお勧めします。以下のコードを使用できます。

        Resource resource = pageFourNew; // assuming you are getting sling resource properly
        ModifiableValueMap valueMap = resource.adaptTo(ModifiableValueMap.class);
        for(String key : valueMap.keySet()) {
            String value = valueMap.get(key, String.class);
            value = value + "additional texts";
            valueMap.put(key, value);
        }
        resource.getResourceResolver().commit();

これはよりクリーンなアプローチです。

于 2016-02-10T10:30:16.640 に答える