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 遍历所有属性,使用 node api 的 setProperty() 方法设置新值,并使用 jcr session 持久化该值以完成此操作。示例代码:

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 实践和这个博客

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

这是更清洁的方法。

于 2016-02-10T10:30:16.640 回答