什么是最干净的方式,我可以使一个复选框自动提交它所属的窗体在Wicket?我根本不想包括一个提交按钮.该复选框由域对象中的布尔字段(在这种情况下为“帐户”)支持.
省略不相关部分的简化示例:
EntityModel<Account> accModel = new EntityModel<Account>(Account.class,id); PropertyModel<Boolean> model = new PropertyModel<Boolean>(accModel,"enabled"); CheckBox checkBox = new CheckBox("cb",model); Form form = new Form("form"); form.add(checkBox); add(form);
HTML:
<form wicket:id="form" id="form" action=""> <input wicket:id="cb" type="checkBox" /> </form>
编辑:为了澄清,我的目标只是在复选框被切换时更改域对象的字段( – >数据库中的值).任何(干净,简单)的方式来实现这将是罚款. (我不知道你是否真的需要这个表单.)
解决方法
只需覆盖所有复选框的wantOnSelectionChangedNotifications()即使没有覆盖onSelectionChanged() – 似乎做了我想要的.
这样,您就不需要Java侧的表单,所以上面的代码将成为:
EntityModel<Account> accModel = new EntityModel<Account>(Account.class,id); add(new CheckBox("cb",new PropertyModel<Boolean>(accModel,"enabled")){ protected boolean wantOnSelectionChangedNotifications() { return true; } });
编辑:仔细检查,我猜the method’s Javadoc使它明确为什么这样做我想要的(强调我的):
If true,a
roundtrip will be generated with each
selection change,resulting in the model being updated (of just this component) and onSelectionChanged being called.