У меня есть простая панель (сама панель является частью большей формы) с CheckGroup. Флажки в контрольной группе генерируются в компоненте просмотра списка. Мне нужно динамически изменять эту панель, и при каждом изменении мне нужно получить выбранные элементы. Код панели в основном выглядит следующим образом:Wicket CheckGroup Двуличность Ajax в модели контрольной группы
CheckGroup<MyObject> group = new CheckGroup<MyObject>(ID, selectedObjects);
ListView<MyObject> objectList = new ListView<MyObject>(ID, values) {
@Override
protected void populateItem(ListItem<MyObject> item) {
Check<MyObject> check = new Check<MyObject>(TIME_CHECK, item.getModel());
Label l = new Label(TIME_LABEL, item.getModel());
item.add(check);
item.add(l);
}
}
group.add(objectList);
group.add(new AjaxFormChoiceComponentUpdatingBehavior() {
@Override
protected void onUpdate(AjaxRequestTarget target) {
System.out.println("Selected objects: "+selectedObjects.size());
}
});
add(group);
Теперь проблема, когда я нажимаю на флажок, два одинаковых объекта добавляются в selectedObjects
список. И если я удалю AjaxFormChoiceComponentUpdatingBehavior
, объекты не будут добавлены в список (что имеет смысл, потому что я не представляю форму на этом этапе).
Я не совсем уверен, как решить эту проблему, и лучшее решение, с которым я столкнулся, - это получить список и пройти через него, удалив дубликаты.
Кроме того, извините за заголовок, но я понятия не имею, как назвать эту проблему.
Вот небольшой пример, чтобы прояснить проблему: Допустим, группа проверка отображения этих объектов:
object 1
object 2
object 3
object 4
object 5
Затем, когда я выбираю object 1
модели контрольной группы (= selectedObjects) будет выглядеть следующим образом:
object 1
object 1
Вы добавляете в свою группу новый AjaxFormChoiceComponentUpdatingBehavior(), но если он существует, он выдаст ошибку. Вы можете попробовать group.addOrReplace (...) или добавить AjaxForm в повторяющееся представление (например, список объектов и использовать дочерний идентификатор). – Igoranze
К сожалению, метод addOrReplace() может использоваться только для Компонентов, а не для Поведений , А поскольку обновляемая модель (selectedObjects) находится в CheckGroup, поведение обновления также должно быть добавлено в контрольную группу, не так ли? По крайней мере, так я понимаю этот механизм в калитки. –
У вас есть стек? – Igoranze