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
    }
});
Другие вопросы по тегам