0

我有一个 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”。

我的问题是如何让标签字符串返回“蓝色”或“绿色”(也就是所选颜色项的文本属性)?

谢谢!

4

2 回答 2

0

虽然您的要求是不可能的,因为该值是唯一将存储在 JCR 中的内容(如@rakhi4110 所述),您仍然可以在 value 属性中添加文本值并在 sling 模型中解析它。

这是您可以做到的一种方法:

<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;
    }
}
于 2019-02-01T17:22:52.063 回答
0

每@rakhi4110:

无法获取标签,因为当作者选择颜色时,只有下拉列表的值会保存在 CRX 中。

于 2019-02-01T00:37:44.510 回答