@Self
Resource resource;
@Inject
@Named(value = "key")
private String key;
@PostConstruct
protected void init() throws PersistenceException {
ResourceResolver rr = resource.getResourceResolver();
ModifiableValueMap map = resource.adaptTo(ModifiableValueMap.class);
String value = fetchValue();
map.put("key", value);
rr.commit();
}
我正在尝试为属性“ Key”赋予默认值“ value”。不幸的是,它必须由一个函数返回,不能简单地通过@Default(..)设置为原始类型。上面的代码似乎什么也不做,该组件的值未更新。我对整个AEM堆栈还很陌生,所以我觉得我可能会走错路了。
您是否尝试将字段key
的值设置为您要获取的值,而不是直接修改JCR属性值?
@Inject
private String key;
@PostConstruct
protected void init() {
if (StringUtils.isBlank(key)) {
key = fetchValue();
}
}
public String getKey() {
return key;
}
换言之,由于提到的@Self
原因,不建议使用here喷油器。
显然我使用@PostConstruct错误:我以为它会在创建节点时触发,但是触发与组件的呈现有关。
渲染组件时在悬吊模型中设置值是反模式。呈现页面时,不应修改存储库。如果在创建组件节点时需要具有默认值,请使用AEM的cq:template功能。创建新的组件实例时,这将复制模板中定义的属性。 [模板!=页面模板在此上下文中]
其用法已在此问题AEM DefaultValue written to JCR中得到回答
附加参考:
http://blogs.adobe.com/experiencedelivers/experience-management/defaults-in-your-component/