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

How iterate all Property of a node and update the value of each property and save in repository in cq5

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

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

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

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

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

您可以按照上面的建议在 JCR 级别轻松地执行此操作。但根据 CQ practices and this blog

更好的做法是在 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();

这是更简洁的方法。