如何迭代节点的所有 属性 并更新每个 属性 的值并保存在 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();
这是更简洁的方法。
我的 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();
这是更简洁的方法。