Я использую таблицу данных Datatables в Wicket. В Java-коде я готовлю с помощью RepeatingViews HTML-теги thead и tbody таблицы, а затем вызываю конструктор DataTable javascript для создания таблицы с разбивкой по страницам, сортировкой и т. Д.
Я хочу добавить столбец флажка вТаблица. Основной флажок в thead (заголовок таблицы) должен переключать все флажки строк в таблице.
Проблема заключается в разбиении на страницы, когда я нажимаю основной флажок, некоторые флажки не существуют в DOM, потому что они включеныразные таблицы страниц. Wicket выдает мне следующие ошибки:
ERROR: Wicket.Ajax.Call.processComponent: Component with id [[id187]] was not found while trying to perform markup update. Make sure you called component.setOutputMarkupId(true) on the component whose markup you are trying to update.
ERROR: Cannot bind a listener for event "change" on element "checkbox76" because the element is not in the DOM
Код, привязанный к главному флажку:
@Override
public void update(AjaxRequestTarget target, boolean state) {
for (int i = 0; i < rowsCheckboxes.size(); i++) {
CustomCheckbox checkbox = rowsCheckboxes.get(i);
checkbox.setState(state);
target.add(checkbox);
}
}
CustomCheckbox выглядит так:
public abstract class CustomCheckbox extends Panel {
private static final long serialVersionUID = 1L;
private boolean state;
public CheckBox checkbox;
public CustomCheckbox(String id) {
super(id);
checkbox = new CheckBox("checkbox", new PropertyModel<>(this, "state"));
checkbox.add(new OnChangeAjaxBehavior() {
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
update(target, state);
}
});
setOutputMarkupId(true);
add(checkbox);
}
public abstract void update(AjaxRequestTarget target, boolean state);
public void setState(boolean state) {
this.state = state;
}
}
HTML этогоCustomCheckbox:
<wicket:panel>
<span class="custom-checkbox">
<input wicket:id="checkbox" type="checkbox">
<label for="select"></label>
</span>
</wicket:panel>
Как я могу подойти к этой проблеме? Я хотел бы установить с помощью основного флажка все флажки, расположенные на текущей странице таблицы, которая отображается пользователю прямо сейчас.
Я пробовал это, но безуспешно:
setOutputMarkupId(true);
setOutputMarkupPlaceholderTag(true);
Эти флажки IЯ использую для клонирования или удаления элементов таблицы.
Спасибо за любой ответ.