检票口:不再选中复选框时收到通知



这是WicketGUI(Wicket 7.6.0(的一部分,它充当显示一些数据库条目的前端。

在这个特定的页面上,我们有一个表单,用户可以在其中按指定搜索条目,例如开始日期、结束日期等来限制结果。点击按钮后,搜索条目将显示在此搜索表单下方。

这些结果使用带分页的检票口DataTable显示。该表中的条目有一个复选框。这是通过一个自定义CheckBoxPanel(从Panel扩展(实现的,Check实例(org.apache.wicket.markup.html.form.Check(被添加到其中。

现在,我想对复选框的每个选择取消选择做出反应。这样做的原因是,我们希望即使在第二个列表中的分页中也能跟踪选择的项目。

我将AjaxFormChoiceComponentUpdatingBehavior添加到组中(请参阅下面的方法addCheckboxes源(。只要至少选中一个复选框,这就可以工作 - 每次单击复选框都会打印调试语句。

但是,当最后一个复选框未选中时,不会调用onUpdate()方法,尽管进行了 AJAX 调用(通过使用Firefox 开发人员工具进行验证(。请求有效负载为group%3Aactions=。当我选择一个项目时,请求有效负载是例如:group=check4&group%3Aactions=

我的问题是:如果不再选择任何项目,有没有办法收到通知?这是保持前面提到的"第二个列表"同步所必需的。

解决方案不需要使用 AJAX,经典的 POST 解决方案也可以。

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);
}
```

问题是,您已经设置了group.setRequired(Boolean.TRUE);,因此根本没有任何选择实际上不是一个有效的状态,这就是为什么没有调用AjaxFormChoiceComponentUpdatingBehavior的onUpdate(AjaxRequestTarget target)的原因。

您可以在 AjaxFormChoiceComponentUpdatingBehavior 中设置group.setRequired(false);或重写onError(AjaxRequestTarget target, RuntimeException e)方法,当(除其他错误外(在需要表单组件时未选择任何元素时调用该方法。

最新更新