【问题标题】:Wicket: Get notified when no checkbox is selected anymoreWicket:当不再选择复选框时收到通知
【发布时间】:2020-02-08 14:25:21
【问题描述】:

这是 Wicket GUI (Wicket 7.6.0) 的一部分,用作显示一些数据库条目的前端。

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

这些结果使用带有分页的 Wicket 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);
}
```

【问题讨论】:

    标签: java wicket web-frameworks wicket-7


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 2019-07-09
      • 2012-03-08
      • 1970-01-01
      • 2014-11-14
      相关资源
      最近更新 更多