要在AEM Sling模型内更新属性,可以使用@PostConstruct
注解和ResourceResolver
对象。以下是一个示例代码:
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.models.annotations.Model;
import org.apache.sling.models.annotations.PostConstruct;
@Model(adaptables = Resource.class)
public class MyModel {
@Inject
private ResourceResolver resourceResolver;
private String propertyValue;
@PostConstruct
protected void init() {
Resource resource = resourceResolver.getResource("/path/to/resource");
ModifiableValueMap valueMap = resource.adaptTo(ModifiableValueMap.class);
if (valueMap != null) {
// 更新属性值
valueMap.put("propertyName", "newValue");
// 保存更改
resourceResolver.commit();
// 获取更新后的属性值
propertyValue = valueMap.get("propertyName", String.class);
}
}
public String getPropertyValue() {
return propertyValue;
}
}
在上面的示例中,使用@PostConstruct
注解标记了一个初始化方法init()
。在此方法内,首先通过resourceResolver
获取要更新的资源,然后将其适配为ModifiableValueMap
以便进行属性的修改。然后,使用put()
方法更新属性值,并通过commit()
方法保存更改。最后,通过get()
方法获取更新后的属性值。
请确保在使用resourceResolver
对象时进行适当的异常处理和资源关闭操作。