如何迭代节点的所有属性并更新每个属性的值并保存在cq5

时间:2016-02-09 20:52:45

标签: iterator cq5 aem jcr jcr-sql2

我的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"并将其保存在存储库中。

我想以编程方式执行此操作。

如果您有任何解决方案或想法,请分享。

2 个答案:

答案 0 :(得分:1)

您可以使用PropertyIterator迭代节点api的所有属性,setProperty()方法来设置新值,并使用jcr会话来保持值以完成此操作。示例代码:

PropertyIterator propertyIterator = pageFourNew.getProperties();
while (propertyIterator.hasNext()) {
    Property property = propertyIterator.nextProperty();
    pageFourNew.setProperty(property.getName(),
        property.getValue().getString() + "");
jcrSession.save();}

答案 1 :(得分:0)

您可以按照JCR级别的建议轻松完成此操作。但是根据CQ practicesblog

最好在Sling级别而不是JCR级别操作,以避免管理资源的开销。您可以使用下面的代码:

        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();

这是更清洁的方法。