Ich habe ein Sling Resource
Objekt. Was ist der beste Weg, um seine Eigenschaft zu setzen oder zu aktualisieren?So legen Sie eine Ressourceneigenschaft fest
Antwort
Es hängt von der Riemen-Version:
Sling> = 2.3.0 (seit CQ 5,6)
Passen Sie Ihre Ressource ModifiableValueMap
, seine put
Methode verwenden und die Ressource Resolver begehen:
ModifiableValueMap map = resource.adaptTo(ModifiableValueMap.class);
map.put("property", "value");
resource.getResourceResolver().commit();
Sling < 2.3.0 (CQ 5.5 und früher)
Passen Sie Ihre Ressource PersistableValueMap
, verwenden seine put
und save
Methoden:
PersistableValueMap map = resource.adaptTo(PersistableValueMap.class);
map.put("property", "value");
map.save();
JCR API
Sie können auch auf die Ressource Node
und verwenden Sie die JCR API anzupassen Eigenschaft zu ändern. Es ist jedoch eine gute Idee, bei einer Abstraktionsschicht zu bleiben, und in diesem Fall brechen wir irgendwie die von Sling bereitgestellte Abstraktion Resource
.
Node node = resource.adaptTo(Node.class);
node.setProperty("property", "value");
node.getSession().save();
Es funktioniert nicht in veröffentlichen. Aber wenn Benutzer angemeldet as admin
wird es funktionieren.
ModifiableValueMap map = resource.adaptTo(ModifiableValueMap.class);
map.put("property", "value");
resource.getResourceResolver().commit();
So viele Entwickler sind nicht gerne mit Node API
. Sie können auch ValueMap- und ModifableValueMap-APIs zum Lesen bzw. Aktualisieren von Eigenschaften verwenden.
lesen Wert durch ValueMap
ValueMap valueMap = resource.getValueMap();
valueMap.get("yourProperty", String.class);
Schreib-/Eigentum durch ModifiableValueMap ändern
ModifiableValueMap modifiableValueMap = resource.adaptTo(ModifiableValueMap.class);
modifiableValueMap.put("NewProperty", "Your Value"); //write
modifiableValueMap.put("OldProperty", "Updated Value"); // Modify