Свойство обновления AEM Sling из модели - PullRequest
0 голосов
/ 16 октября 2019
@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();
    }

Я пытаюсь присвоить свойству «Ключ» значение по умолчанию «Значение». К сожалению, она должна быть возвращена функцией и не может быть просто установлена ​​на примитивный тип с помощью @Default (..). Код выше, похоже, ничего не делает, значение компонента не обновляется. Я довольно новичок во всем стеке AEM, поэтому я чувствую, что могу ошибиться.

Ответы [ 3 ]

0 голосов
/ 17 октября 2019

Видимо, я неправильно использовал @PostConstruct: я думал, что это сработает при создании узла, но триггер вместо этого связан с рендерингом компонента.

0 голосов
/ 17 октября 2019

Установка значений в модели строп при рендеринге компонента является анти-паттерном. Хранилище не должно быть изменено во время отображения страницы. Если вам нужно иметь значения по умолчанию при создании узла компонента, используйте функцию cq: template AEM. Это копирует свойства, определенные в шаблоне, при создании нового экземпляра компонента. [template! = шаблон страницы в этом контексте]

На его использование в этом вопросе дан ответ AEM DefaultValue, записанное в JCR

Дополнительная ссылка:

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

0 голосов
/ 17 октября 2019

Вы пытались установить значение поля key равным значению, которое вы пытались получить, вместо непосредственного изменения значения свойства JCR?

@Inject
private String key;

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

public String getKey() {
    return key;
}

В другой заметке @Selfинжектор не рекомендуется по причинам, указанным здесь .

...