Слинг AEM / Модель / Получить текст элемента не значение - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть сайт AEM.Мой интерфейсный файл content.xml имеет список выбора различных вариантов цвета на выбор:

<items jcr:primaryType="nt:unstructured">
    <colors
        jcr:primaryType="nt:unstructured"
        sling:resourceType="granite/ui/components/coral/foundation/form/select"
        fieldLabel="Select a Color"
        name="./colors">
            <items jcr:primaryType="nt:unstructured">
                <blue
                    jcr:primaryType="nt:unstructured"
                    text="Blue"
                    value="bl blue"/>
                <green
                    jcr:primaryType="nt:unstructured"
                    text="Green"
                    value="gr green"/>....

Моя модель выглядит примерно так:

@Model(adaptables=Resource.class)
public class Color{

    @Inject @Named("colors") @Optional
    private String cssClass ;

    @Inject @Named("colors.text") @Optional //This is not working
    private String label;

    public String getCssClass() {
        return cssClass;
    }

    public String getLabel() {
        return label;
    }

    public void setCssClass(String cssClass) {
        this.cssClass = cssClass;
    }

    public void setLabel(String label) {
        this.label = label;
    }
}

Этот код вернет строку cssClassлибо «bl blue», либо «gr green» в зависимости от того, что выбрал пользователь.

Мой вопрос заключается в том, как получить строку метки, которая возвращает «синий» или «зеленый» (он же атрибут текста выбранного элемента цвета)?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Хотя то, что вы спрашиваете, невозможно, так как значение - это единственное, что будет храниться в JCR (как упомянуто @ rakhi4110), вы все равно можете добавить текстовое значение в атрибут значения и проанализировать его в модели слинга..

Вот один из способов сделать это:

<items jcr:primaryType="nt:unstructured">
    <colors
        jcr:primaryType="nt:unstructured"
        sling:resourceType="granite/ui/components/coral/foundation/form/select"
        fieldLabel="Select a Color"
        name="./colors">
            <items jcr:primaryType="nt:unstructured">
                <blue
                    jcr:primaryType="nt:unstructured"
                    text="Blue"
                    value="Blue:bl blue"/>
                <green
                    jcr:primaryType="nt:unstructured"
                    text="Green"
                    value="Green:gr green"/>....

Уведомление value="Blue:bl blue" и value="Green:gr green"

Теперь в вашей модели стропа вы можете сделать:

@Model(adaptables=Resource.class)
public class Color{

    @Inject @Named("colors") @Optional
    private String colorValue ;

    private cssClass;
    private label;

    @PostConstruct
    protected void init() {
        // This is a very rudimentary way to illustrate the point
        // you can do this in many other ways/data structures to get the same result
        String[] parts = colorValue.split(":");
        label = parts[0];
        cssClass = parts[1];
    }

    public String getCssClass() {
        return cssClass;
    }

    public String getLabel() {
        return label;
    }
}
0 голосов
/ 01 февраля 2019

Per @ rakhi4110:

Невозможно получить метку, поскольку только значение раскрывающегося списка сохраняется в CRX, когда автор выбирает цвет.

...