Ho un oggetto Sling Resource
. Qual è il modo migliore per impostare o aggiornare la sua proprietà?Come impostare una proprietà risorsa
risposta
Dipende dalla versione Sling:
Sling> = 2.3.0 (dal CQ 5,6)
adattare la vostra risorsa per ModifiableValueMap
, utilizzare il suo metodo put
e commettere il resolver risorsa:
ModifiableValueMap map = resource.adaptTo(ModifiableValueMap.class);
map.put("property", "value");
resource.getResourceResolver().commit();
Sling < 2.3.0 (CQ 5.5 e precedenti)
adattare la vostra risorsa per PersistableValueMap
, utilizzare i suoi put
e save
metodi:
PersistableValueMap map = resource.adaptTo(PersistableValueMap.class);
map.put("property", "value");
map.save();
JCR API
Si può anche adattare la risorsa da Node
e utilizzare il JCR API per modificare la proprietà. Tuttavia, è una buona idea attenersi a un livello di astrazione e in questo caso in qualche modo si interrompe l'astrazione Resource
fornita da Sling.
Node node = resource.adaptTo(Node.class);
node.setProperty("property", "value");
node.getSession().save();
Non funziona in pubblicazione. Ma se l'utente ha effettuato il login as admin
, funzionerà.
ModifiableValueMap map = resource.adaptTo(ModifiableValueMap.class);
map.put("property", "value");
resource.getResourceResolver().commit();
Come molti sviluppatori non amano usare Node API
. È inoltre possibile utilizzare le API ValueMap e ModifiableValueMap per leggere e aggiornare rispettivamente la proprietà.
Leggi valore attraverso ValueMap
ValueMap valueMap = resource.getValueMap();
valueMap.get("yourProperty", String.class);
di scrittura/modifica proprietà attraverso ModifiableValueMap
ModifiableValueMap modifiableValueMap = resource.adaptTo(ModifiableValueMap.class);
modifiableValueMap.put("NewProperty", "Your Value"); //write
modifiableValueMap.put("OldProperty", "Updated Value"); // Modify