ZKOSS 7.0.0 互斥复选框实现与可清空单选组问题咨询
ZK 7.0.0 互斥选择功能实现方案
复选框互斥逻辑修正(无需固定ID、适配列表多选场景)
当前实现失效的核心原因有两点:
- 勾选其中一个复选框时,没有同步将同一条数据对应的另一个互斥字段置为未选中状态
nonaddebitata方法的@NotifyChange注解漏写了flagAddebitata字段,即使后端更新了值前端也不会同步刷新
直接修改后端两个Command方法即可,不需要调整zul页面的组件ID,所有状态绑定到列表项对应的DTO字段,天然适配多选场景:
@Command @NotifyChange ({ "flagAddebitata","nonAddebitare", "selectedRic"}) public void addebitata(@BindingParam("fladd") boolean fladd,@BindingParam("idPer")int idPerizia ) { selectedRic = new HashSet<>(); for(AddebitoClienteViewDTO add : carList) { if(add.getIdPerizia() == idPerizia) { add.setFlagAddebitata(booleanToString.apply(fladd)); // 勾选当前复选框时,自动取消另一个互斥复选框的选中状态 if (fladd) { add.setNonAddebitare("0"); } selectedRic.add(add); } } } @Command // 补全flagAddebitata字段的变更通知 @NotifyChange ({ "flagAddebitata","nonAddebitare", "selectedRic"}) public void nonaddebitata(@BindingParam("flnoadd") boolean flnoadd,@BindingParam("idPer")int idPerizia ) { selectedRic = new HashSet<>(); for(AddebitoClienteViewDTO add : carList) { if(add.getIdPerizia() == idPerizia) { add.setNonAddebitare(booleanToString.apply(flnoadd)); // 勾选当前复选框时,自动取消另一个互斥复选框的选中状态 if (flnoadd) { add.setFlagAddebitata("0"); } selectedRic.add(add); } } }
Radiogroup 支持全不选的实现方式
ZK原生Radiogroup本身没有强制必须选中一项的限制,不需要写额外的Java清空函数,只要按以下方式配置即可:
- 不在后端给Radiogroup的
selectedItem设置初始默认值,页面加载时默认就是全不选状态 - 给DTO新增一个选项绑定字段(比如
selectedChargeOption),值为null时对应全不选,值为"add"对应选中“已计费”,值为"noadd"对应选中“不计费” - 如果需要支持点击已选中的单选项取消选中,直接在zul上给radio加一行客户端逻辑即可,无需请求后端:
<cell colspan="4"> <radiogroup selectedItem="@bind(each.selectedChargeOption)"> <radio label="${labels.label.giaAddebitata}" value="add" disabled="@load(each.statoContabile eq 4)" onCheck="if(self.isSelected()) self.getRadiogroup().setSelectedItem(null)"/> <radio label="${labels.label.nonAddebitare}" value="noadd" disabled="@load(each.statoContabile eq 4)" onCheck="if(self.isSelected()) self.getRadiogroup().setSelectedItem(null)"/> </radiogroup> </cell>
内容的提问来源于stack exchange,提问作者Enrico Brambilla
相关产品推荐
相关产品推荐

