Java Wicket框架:勾选AjaxCheckBox时自动勾选另一个CheckBox的实现方法
实现方案
核心逻辑
AjaxCheckBox触发onUpdate回调时,Wicket已经自动同步了checkBox2对应的模型值,仅需完成两步操作即可实现同步勾选:
- 读取
checkBox2的最新选中状态,同步赋值给checkBox1对应的模型属性 - 将
checkBox1加入AjaxRequestTarget的刷新队列,触发前端状态更新
代码示例
注意要给checkBox1加final修饰,才能在AjaxCheckBox的匿名内部类中正常访问:
final CheckBox checkBox1 = new CheckBox("enableCheckBox1", new PropertyModel<Boolean>(channelModel, "checkBox1")); CheckBox checkBox2 = new AjaxCheckBox("enableCheckbox2", new PropertyModel<Boolean>(channelModel, "checkBox2")) { @Override protected void onUpdate(AjaxRequestTarget target) { // 获取checkBox2最新的选中状态 Boolean checkBox2Checked = getModelObject(); // 同步勾选逻辑:checkBox2勾选时自动勾选checkBox1 if (Boolean.TRUE.equals(checkBox2Checked)) { // 方式1:直接操作公共模型赋值 channelModel.setCheckBox1(true); // 方式2:通过checkBox1组件操作模型,二选一即可 // checkBox1.setModelObject(true); // 将checkBox1加入Ajax刷新目标,同步前端显示 target.add(checkBox1); } // 如果需要取消checkBox2时同步取消checkBox1,删除if判断直接赋值即可: // channelModel.setCheckBox1(checkBox2Checked); // target.add(checkBox1); } };
注意事项
- 如果需要支持反向同步(勾选checkBox1时同步checkBox2),给checkBox1也换成
AjaxCheckBox,按照同样逻辑实现onUpdate方法即可 - 必须调用
target.add(checkBox1),否则仅后端模型值更新,前端页面不会刷新显示状态
内容的提问来源于stack exchange,提问作者caurangzeb
相关产品推荐
相关产品推荐

