Wicket DropDownChoice НЕ работает правильно с PropertyModels
Я пытался отладить, почему мой DropDownChoice в простой форме с одним только DropDown и кнопкой "Отправить" не работает правильно в течение нескольких часов.
Это очень странное поведение. Когда первое значение, выбранное в раскрывающемся списке, успешно отправляется на сервер, после чего любой другой вариант выбора не обновляется моделью. то есть, если у меня есть Список людей, и я выбираю второго человека, он успешно передает это. Тем не менее, при выборе другого человека и попытке отправить его снова, он показывает первый выбранный вариант.
Фрагменты кода здесь:
ChoiceRenderer<Empowerment> empowermentChoiceRenderer = new ChoiceRenderer<>("name", "id");
final DropDownChoice<Empowerment> empowermentDropDownChoice =
new DropDownChoice<>("empowerment", new PropertyModel<Empowerment>(this, "empowerment"), empowermentList, empowermentChoiceRenderer);
empowermentDropDownChoice.setRequired(true);
add(empowermentDropDownChoice);
Единственный способ получить приличное поведение - это установить для переменной empowerment значение null. В этом случае при отправке полномочие повторно инициализируется до нуля, а затем новая отправка работает правильно.
Расширение прав и возможностей - это просто сущность JPA.
Я буду рад узнать, если это известная проблема. Я испытал это в калитке 6.9.1 и калитке 6.12
2 ответа
Наконец-то нашли решение проблемы. Вышеприведенный код корректен, но проблема заключается в самом классе сущностей - Empowerment должен правильно реализовывать Equals и Hashcode.
После этого DropDownChoice отлично работает.
Добавить OnChangeAjaxBehavior
на ваш DropDownChoice
, Это обновит значение модели при каждом изменении выбора, которое вы делаете в выпадающем меню:
empowermentDropDownChoice .add(new OnChangeAjaxBehavior() {
@Override
protected void onUpdate(AjaxRequestTarget art) {
//just model update
}
});