0

我对 DropDownChoice 有一些问题。我有一个带有学校名称列表的枚举,例如:

public enum StudyTitle {

    NONE(null,null),ELEMENTARY("1","Elementary"),COLLEGE("2","College");

    private String code;
    private String description;

    private StudyTitle(String code, String description){
        setCode(code);
        setDescription(description);
    }

    [setter and getter]

}

然后我有一个带有字符串属性的 Pojo,调用“studyTitleCode”,我想在其中放置代码(例如 1 用于小学,2 用于大学等......)。

当我创建 DropDownChoice Wicket 时,如果 DropDownChoice 的类型为 StudyTitle,则不允许我拥有 String 类型的属性模型。

前任。[将 listOfStudyTitle 构建为枚举的 ArrayList]

DropDownChoice<String> studyLevel = new DropDownChoice<String>("id",new PropertyModel<String>(myPojo,"studyTitleCode"),listOfStudyTitle,new ChoiceRenderer<StudyTitle>("description","code"));

是否有一种方法允许 Wicket 将枚举的一个属性链接到模型的属性?

谢谢

4

1 回答 1

1

AbstractSingleSelectChoice 的选择选项必须与值模型的类型相匹配。我知道的 DropDownChoice 唯一相关的配置选项是 IChoiceRenderer,它允许您设置枚举值的呈现方式(与默认调用 toString() 相比)。

一种选择是,不要将枚举实例本身用于您的选择模型,而是为枚举提供一个可以使用的 String 属性:

public enum TestEnum {
    ONE ("ONE"),
    TWO ("TWO"), 
    THREE ("THREE");

    private String value;

    TestEnum(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    public static List<String> getStringValues()
    {
        List<String> stringValues = new ArrayList<String>();
        for (TestEnum test : values()) {
            stringValues.add(test.getValue());
        }

        return stringValues;
    }
}

@Override
protected void onInitialize() {
    super.onInitialize();

    IModel<String> myStringValueModel = new Model<String>();
    add(new DropDownChoice<String>("id", myStringValueModel, TestEnum.getStringValues()));
}
于 2012-08-02T11:43:22.480 回答