[AEM悬吊模型内部的更新属性

问题描述 投票:0回答:3
@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堆栈还很陌生,所以我觉得我可能会走错路了。

properties model resources aem sling
3个回答
0
投票

您是否尝试将字段key的值设置为您要获取的值,而不是直接修改JCR属性值?

@Inject
private String key;

@PostConstruct
protected void init() {
    if (StringUtils.isBlank(key)) {
        key = fetchValue();
    }
}

public String getKey() {
    return key;
}

换言之,由于提到的@Self原因,不建议使用here喷油器。


0
投票

显然我使用@PostConstruct错误:我以为它会在创建节点时触发,但是触发与组件的呈现有关。


0
投票

渲染组件时在悬吊模型中设置值是反模式。呈现页面时,不应修改存储库。如果在创建组件节点时需要具有默认值,请使用AEM的cq:template功能。创建新的组件实例时,这将复制模板中定义的属性。 [模板!=页面模板在此上下文中]

其用法已在此问题AEM DefaultValue written to JCR中得到回答

附加参考:

http://blogs.adobe.com/experiencedelivers/experience-management/defaults-in-your-component/

© www.soinside.com 2019 - 2024. All rights reserved.