Wicket - 从Enum到Primitive的DropDownChoice

时间:2012-08-02 11:09:56

标签: wicket dropdownchoice

我在使用DropDownChoice时遇到了一些问题。 我有一个Enum,上面有一个学校名称列表:

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,带有一个String proprerty调用“studyTitleCode”,我想放置代码(ex 1代表小学,2代表大学等...)。

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

实施例。     [将listOfStudyTitle构建为Enums的ArrayList]

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

是否有方法允许Wicket将Enum的一个属性链接到Model的属性?

由于

1 个答案:

答案 0 :(得分: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()));
}