验证非或最大。在 wicket listview 中启用了 1 个复选框

Validate non or max. 1 checkbox is enabled in wicket listview

如何验证在列表视图(重复器)中选中的复选框不超过一个?

我在 Wicket 中有一个带有 ListView 的表单,其结构如下:

第 1 行到第 n 行:AjaxCheckBoxTextField

两个元素都由 CompoundPropertyModel<SimpleType> 连接。 POJO SimpleType 看起来像:

public class SimpleType {
   private boolean enabled;
   private String value;

   Getter/Setter...
}

如果选中多个复选框,表单应拒绝任何更改。因此,用户必须先取消选择选中的复选框,然后才能选择另一个复选框。 我尝试用 IValidator<Collection<SimpleType>> 包围 CheckGroup,但我需要将 AjaxCheckBox 更改为组件 Check。在这种情况下,Check 似乎未使用 CompoundPropertyModel 中的状态 enabled 进行更新。

对于这种情况,我真的需要验证者或访客吗?如何实施?

由于收音机不是一个选项,这里有一个应该可行的简单解决方案:

为了验证,使用访问所有 AjaxCheckBox-es 的 IFormValidator。

对于即时 UI 响应,我将使用取消选中先前选中的复选框的普通 JS。这也会触发 Wicket Ajax 调用以在服务器端取消选择它。 一旦提交了完整的表单,IFormValidator 就会开始工作。