我正在使用wicket的CheckBoxMultipleChoice让用户设置选项列表。到目前为止它工作正常。但后来我想添加一个“全部检查”复选框,检查CheckBoxMultipleChoice中的所有选项,我遇到了问题。
这是我的初始代码
ArrayList<String> chosen;
List<String> choices = Arrays.asList(new String[]{"Train", "Bus", "Car"});
CheckBoxMultipleChoice myCheck = new CheckBoxMultipleChoice("transport", new Model(chosen), choices));
myCheck.setOutputMarkupId(true);
form.add(myCheck);
在提交时,我按预期打印出所选的及其“公共汽车”,“汽车”等的值。
现在我添加一个复选框,使用ajax检查所有选项:
Boolean checkOrNot;
final CheckBox checkAll = new CheckBox("checkAll", new Model(checkOrNot));
form.add(checkAll);
checkAll.add(new AjaxFormComponentUpdatingBehavior("onchange") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
// here i am not able to set the checkboxes
// i tried doing this
chosen.clear();
chosen.add(new String("Car"));
chosen.add(new String("Train"));
myCheck.modelChanged();
// i have also tried recreating the multiple choice
myCheck = new CheckBoxMultipleChoice<T>("transport", new Model(chosen), choices);
myCheck.setOutputMarkupId(true);
target.addComponent(myCgecj);
target.addComponent(form);
}
});
我的想法已经用完,想知道是否有人有任何解决方案?提前感谢您的帮助。
答案 0 :(得分:3)
我现在没有(并且不能)尝试这样做,所以这需要用一点点盐,但是你不能使用CheckGroup吗?
来自JavaDoc:
用于将Check组件的实例连接到组的组件。 Check的实例必须位于组件组件下面的组件层次结构中。 CheckGroup组件的模型必须是java.util.Collection的实例。该组的模型集合中填充了所有选定Check组件的模型对象。
所以
new Checkgroup("group", choices)
应该适合你。无需重新实现该功能。
P.S。:一旦我有机会,我会检查一下......答案 1 :(得分:1)
您可以使用javascript标记复选框。
使用jQuery的一个例子:
mycheck.setOutputMarkupId(true);
checkAll.add(new SimpleAttributeModifier("onclick",
"$('#" + mycheck.getMarkupId() + " input:checkbox').attr('checked', $(this).is(':checked'))");
答案 2 :(得分:1)
嗯,另一种方法是使用
checkBoxMultipleChoice.setDefaultModelObject(listOfAllElements); // Select all.
checkBoxMultipleChoice.setDefaultModelObject(Lists.newArrayList()); // Deselect all.
答案 3 :(得分:0)
我知道你已经得到了答案,但在我的情况下,我有完全相同的问题,但是使用CheckGroup的选项是不可行的,因为我的列表是动态构建的,并且在开始时它甚至可以是空的。
我的情况是:
感谢上帝,我找到了This Forum in Nabble。
基本上,Pedro Santos建议使用 AjaxFormChoiceComponentUpdatingBehavior 。我遵循了建议,最后我能够获得模型中的值。
有时我认为Wicket是邪恶的:P