Wicket:如何在CheckBoxMultipleChoice中设置选中的值

时间:2011-05-09 05:33:20

标签: java checkbox wicket

我正在使用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);          
    }
});

我的想法已经用完,想知道是否有人有任何解决方案?提前感谢您的帮助。

4 个答案:

答案 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的选项是不可行的,因为我的列表是动态构建的,并且在开始时它甚至可以是空的。

我的情况是:

  1. 我不得不使用 CheckBoxMultipleChoice ,因为它允许我有空列表,从而在GUI中反映出来。 CheckGroups将始终打印一个没有标签的复选框,即使该组件的选项为空。
  2. 使用 AjaxFormComponentUpdatingBehavior 会抛出异常,说明只能在其他组件中使用它。
  3. 使用 OnChangeAjaxBehavior 可以使用选择器CheckBox(选择/取消选择),但如果与CheckBoxMultipleChoice一起使用,则会触发事件,但组件的实际值不会反映在模型中事件
  4. 感谢上帝,我找到了This Forum in Nabble

    基本上,Pedro Santos建议使用 AjaxFormChoiceComponentUpdatingBehavior 。我遵循了建议,最后我能够获得模型中的值。

    有时我认为Wicket是邪恶的:P