java - Wicket:当不再选择复选框时收到通知
问题描述
这是 Wicket GUI (Wicket 7.6.0) 的一部分,它充当前端以显示一些数据库条目。
在这个特定页面上,我们有一个表单,用户可以通过指定搜索条目,例如。开始日期、结束日期等以限制结果。点击按钮后,搜索条目将显示在此搜索表单下方。
这些结果使用DataTable
带有分页的 Wicket 显示。该表中的条目有一个复选框。这是由添加实例 ( ) 的自定义CheckBoxPanel
(从 扩展而来Panel
)实现的。Check
org.apache.wicket.markup.html.form.Check
现在,我想对复选框的每次选择和取消选择做出反应。这样做的原因是,即使在第二个列表中的分页中,我们也希望跟踪选择的项目。
我将其添加AjaxFormChoiceComponentUpdatingBehavior
到组中(请参阅addCheckboxes
下面的方法来源)。只要选择了至少一个复选框,此功能就可以工作 - 每次单击复选框都会打印调试语句。
但是,当最后一个复选框未选中时,尽管进行了 AJAX 调用(通过使用Firefox Developer Tools验证),但不会onUpdate()
调用该方法。请求有效负载是. 当我选择一个项目时,请求有效负载是例如:.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);
因此根本没有任何选择实际上不是有效状态,这就是为什么onUpdate(AjaxRequestTarget target)
不调用 AjaxFormChoiceComponentUpdatingBehavior 的原因。
您可以设置group.setRequired(false);
或覆盖onError(AjaxRequestTarget target, RuntimeException e)
AjaxFormChoiceComponentUpdatingBehavior 中的方法,当需要表单组件时(以及其他错误)没有选择任何元素时会调用该方法。
推荐阅读
- visual-studio-code - 与终端在同一列中的编辑器
- python - 熊猫:在另一列中获取具有多个不同对应值的列中的值
- python - Python Selenium 值选择
- python - 渲染
在 Visual Studio 代码中 - Python - java - 在java中使用用户定义的数据类型对数组进行排序
- node.js - 如果消息来自 3 个特定用户,请忽略他们
- image - 如何在inkscape中减少导入图像的线条粗细
- unit-testing - 在 Nestjs 中使用 Jest 更新字段
- javascript - 在 Android Studio 中使用 WebView 启动 iframe(付款)时出现问题
- thymeleaf - Micronaut - Thymeleaf - #request 为空