Использование перечислений в качестве объекта модели в Wicket - PullRequest
7 голосов
/ 10 мая 2011

Чтобы использовать класс Enum в PropertyModel, вы можете написать:

new PropertyModel(MyObject, "MyEnumClass");

Теперь это работает, только если MyEnumClass определено в классе MyObject.

Как я могу использовать автономный класс Enum в модели?

Редактировать: Конкретизирую:

RadioGroup<MyEnum> rg = new RadioGroup<MyEnum>("radioGroupID", new Model<MyEnum>(MyEnum.NORMAL));

rg.add(new Radio<MyEnum>("radioNormal", new Model<MyEnum>(MyEnum.NORMAL)));
rg.add(new Radio<MyEnum>("radioSpecial", new Model<MyEnum>(MyEnum.SPECIAL)));

Проблема здесь в том, что смена переключателя не меняет модель на RadioGroup.

Ответы [ 2 ]

2 голосов
/ 11 мая 2011

Я только что нашел проблему: я использовал AjaxEventBehavior на моем RadioGroup вместо AjaxFormChoiceComponentUpdatingBehavior.

Это исправило проблему обновления модели для моего кода в вопросе.

2 голосов
/ 10 мая 2011

Я без проблем использую следующее для моего компонента Enum "NMRType" DropDownChoice:

IModel<NMRType> default = Model.of(NMRType.HNMR);
List<NMRType> choices = Arrays.asList(NMRType.values());
DropDownChoice<NMRType> nmrDDC = 
    new DropDownChoice<NMRType>("nmrType", default, choices);

Только примечание: будьте осторожны, чтобы не писать в свои модели Enum. Wicket использует отражение, что может вызвать несколько сюрпризов, если вы это сделаете ..

...