Калитка: Получать уведомления, когда флажок больше не установлен - PullRequest
0 голосов
/ 08 февраля 2020

Это часть Wicket GUI (Wicket 7.6.0), которая выступает в качестве внешнего интерфейса для отображения некоторых записей базы данных.

На этой указанной странице c у нас есть форма, где пользователь может искать записи, указав, например, дата начала, дата окончания и т. д. c. ограничить результаты. После нажатия на кнопку под этой формой поиска отображаются результаты поиска.

Эти результаты отображаются с использованием калитки DataTable с нумерацией страниц. Записи в этой таблице имеют флажок. Это реализуется с помощью пользовательского CheckBoxPanel (расширенного с Panel), к которому добавляется экземпляр Check (org.apache.wicket.markup.html.form.Check).

Теперь я хочу отреагировать на каждый выбор и снимите флажок. Причина этого заключается в том, что мы хотим отслеживать элементы выбора даже при разбивке на страницы во втором списке.

Я добавил AjaxFormChoiceComponentUpdatingBehavior в группу (см. Источник метода addCheckboxes ниже). Это работает до тех пор, пока выбран хотя бы один флажок - для каждого щелчка на флажке печатается оператор отладки.

Но если последний флажок снят, метод onUpdate() равен , а не вызывается, несмотря на то, что сделан вызов AJAX (проверено с помощью Firefox Developer Tools ). Полезная нагрузка запроса group%3Aactions=. Когда я выбираю элемент, полезная нагрузка запроса, например: group=check4&group%3Aactions=.

Мой вопрос: Можно ли получить уведомление, если ни один элемент больше не выбран? Это необходимо для сохранения упомянутого ранее «второго списка» в формате syn c.

. В решении не нужно использовать AJAX, решение POST classi c также будет в порядке.

private void addCheckboxes() {
    System.out.println("addCheckboxes called!");
    selectedModel = new CollectionModel<FaultModel>(new ArrayList<FaultModel>());
    group = new CheckGroup<FaultModel>("group", selectedModel);
    group.onSelectionChanged();
    group.setRequired(Boolean.TRUE);

    CustomCheckGroupSelector<FaultModel> groupSelector = new CustomCheckGroupSelector<>("groupselector", rows.isEmpty());

    RemarkModalWindow remarkModal = new RemarkModalWindow("remarkModal", selectedModel);
    IndicatingAjaxButton actionButton = new ActionButton<FaultModel>("execute", this, remarkModal, rows.isEmpty());

    DefaultDataTable<?, String> table = TableFactory.getTable2(CustomType.FAULT, rows, page);
    group.add(table);
    group.add(groupSelector);
    group.add(remarkModal);
    group.add(actionButton);

    group.add(new AjaxFormChoiceComponentUpdatingBehavior() {
        @Override protected void onUpdate(AjaxRequestTarget target) {
            System.out.println("!! onUpdate !! Adding selected items to second list.");
        }
    });

    add(group);
}
```

1 Ответ

4 голосов
/ 09 февраля 2020

Проблема в том, что вы установили group.setRequired(Boolean.TRUE);, поэтому отсутствие выбора вообще фактически не является допустимым состоянием, поэтому onUpdate(AjaxRequestTarget target) вашего AjaxFormChoiceComponentUpdatingBehavior не вызывается.

Вы можете либо установите group.setRequired(false); или переопределите метод onError(AjaxRequestTarget target, RuntimeException e) в вашем AjaxFormChoiceComponentUpdatingBehavior, который вызывается, когда (среди других ошибок) не выбраны элементы, в то время как компонент формы требуется.

...