Mam obiekt Sling Resource
. Jaki jest najlepszy sposób ustawienia lub aktualizacji jej właściwości?Jak ustawić właściwość zasobu?
Odpowiedz
To zależy od wersji Sling:
Chusta> = 2.3.0 (od CQ 5.6)
Dostosować swój zasób do ModifiableValueMap
, wykorzystać swoją metodę put
i zobowiązać resolwer zasobu:
ModifiableValueMap map = resource.adaptTo(ModifiableValueMap.class);
map.put("property", "value");
resource.getResourceResolver().commit();
chusta < 2.3.0 (CQ 5,5 włącznie)
Dostosować swój zasób do PersistableValueMap
, wykorzystać swoje put
i save
metod:
PersistableValueMap map = resource.adaptTo(PersistableValueMap.class);
map.put("property", "value");
map.save();
JCR API
Można również dostosować zasób do Node
i użyć JCR API do zmiany własności. Jednak dobrze jest trzymać się jednej warstwy abstrakcji iw tym przypadku jakoś przełamujemy abstrakcję Resource
dostarczoną przez Sling.
Node node = resource.adaptTo(Node.class);
node.setProperty("property", "value");
node.getSession().save();
Nie działa w publikowaniu. Ale jeśli użytkownik zaloguje się as admin
to zadziała.
ModifiableValueMap map = resource.adaptTo(ModifiableValueMap.class);
map.put("property", "value");
resource.getResourceResolver().commit();
Wielu deweloperów nie lubi używać numeru Node API
. Możesz także użyć API ValueMap i ModifiableValueMap do odczytu i aktualizacji właściwości.
odczytać wartość poprzez ValueMap
ValueMap valueMap = resource.getValueMap();
valueMap.get("yourProperty", String.class);
Zapis/Modyfikowanie własności poprzez ModifiableValueMap
ModifiableValueMap modifiableValueMap = resource.adaptTo(ModifiableValueMap.class);
modifiableValueMap.put("NewProperty", "Your Value"); //write
modifiableValueMap.put("OldProperty", "Updated Value"); // Modify