如何设置资源属性

时间:2014-07-09 20:17:44

标签: cq5 jcr sling

我有一个Sling Resource对象。设置或更新其属性的最佳方法是什么?

3 个答案:

答案 0 :(得分:29)

这取决于Sling版本:

Sling> = 2.3.0(自CQ 5.6起)

将您的资源调整为ModifiableValueMap,使用其put方法并提交资源解析器:

ModifiableValueMap map = resource.adaptTo(ModifiableValueMap.class);
map.put("property", "value");
resource.getResourceResolver().commit();

吊索< 2.3.0(CQ 5.5及更早版本)

将您的资源调整为PersistableValueMap,使用其putsave方法:

PersistableValueMap map = resource.adaptTo(PersistableValueMap.class);
map.put("property", "value");
map.save();

JCR API

您还可以将资源调整为Node并使用JCR API更改属性。但是,坚持使用一个抽象层是一个好主意,在这种情况下,我们会以某种方式打破Sling提供的Resource抽象。

Node node = resource.adaptTo(Node.class);
node.setProperty("property", "value");
node.getSession().save();

答案 1 :(得分:4)

许多开发人员不喜欢使用Node API。您还可以使用ValueMap和ModifiableValueMap API分别读取和更新属性。

通过ValueMap读取值

ValueMap valueMap = resource.getValueMap();
valueMap.get("yourProperty", String.class);

通过ModifiableValueMap写入/修改属性

ModifiableValueMap modifiableValueMap = resource.adaptTo(ModifiableValueMap.class);
modifiableValueMap.put("NewProperty", "Your Value");  //write
modifiableValueMap.put("OldProperty", "Updated Value"); // Modify

将属性写入节点后,通过提交' resourceResolver'

保存这些值
  

admin resourceResolver ,您需要系统/服务用户。

     

浏览this文档,了解有关服务用户的更多信息。

答案 2 :(得分:1)

它不适用于发布。但是,如果用户登录as admin它将起作用。

ModifiableValueMap map = resource.adaptTo(ModifiableValueMap.class);
map.put("property", "value");
resource.getResourceResolver().commit();