我在使用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的属性?
由于
答案 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()));
}