2011-05-09 48 views
4

我正在使用wicket的CheckBoxMultipleChoice來讓用戶設置選項列表。到目前爲止它工作正常。但後來我想添加一個「全選」複選框,檢查CheckBoxMultipleChoice中的所有選項,並且遇到問題。Wicket:如何在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);   
    } 
}); 

我運行的想法,並想知道如果任何人有任何解決方案?在此先感謝您的幫助。

+1

另外我想知道CheckGroup在這種情況下是否會是更好的選擇? – amango 2011-05-09 07:01:00

回答

3

我沒有(也不能)現在嘗試,所以這是一粒鹽,但你不能使用CheckGroup

從JavaDoc的:

組件用於檢查部件的實例連接成一組。檢查實例必須位於組件組件下方的組件層次結構中。 CheckGroup組件的模型必須是java.util.Collection的一個實例。該組的模型集合充滿了所有選定檢查組件的模型對象。

所以一個

new Checkgroup("group", choices) 

應該爲你工作。無需重新實現該功能。

P.S:我會盡快我必須這樣做的機會檢查...

+0

我確實最終使用CheckGroup並使其工作。謝謝 – amango 2011-05-10 01:36:02

1

你可以使用JavaScript來標記的複選框。

一個例子,使用jQuery:

mycheck.setOutputMarkupId(true); 
checkAll.add(new SimpleAttributeModifier("onclick", 
    "$('#" + mycheck.getMarkupId() + " input:checkbox').attr('checked', $(this).is(':checked'))"); 
+0

謝謝,JavaScript是我要嘗試的下一件事。 – amango 2011-05-10 01:36:45

1

好,另闢蹊徑,走的是使用

checkBoxMultipleChoice.setDefaultModelObject(listOfAllElements); // Select all. 
checkBoxMultipleChoice.setDefaultModelObject(Lists.newArrayList()); // Deselect all. 
+0

我已經嘗試過這個爲我+1的工作 – soorapadman 2016-06-21 11:57:44

0

我知道你已經發現那位一個答案,但在我的情況我有完全一樣的問題,但使用CheckGroup的選項不可行,因爲我的列表是動態構建的,並且在開始時它甚至可以是空的。

的情況對我來說是:

  1. 我不得不使用CheckBoxMultipleChoice,因爲它讓我有空列表從而反映在GUI中。即使組件的選項爲空,CheckGroups也將始終打印一個沒有標籤的複選框。
  2. 使用AjaxFormComponentUpdatingBehavior會拋出一個異常,說它只能在其他組件中使用它。
  3. 使用OnChangeAjaxBehavior將與選擇器CheckBox(選擇/取消選擇)一起使用,但如果與CheckBoxMultipleChoice一起使用,則事件將觸發,但組件的實際值不會反映在事件中的模型中。

感謝上帝,我發現This Forum in Nabble

基本上這裏佩德羅桑托斯建議使用AjaxFormChoiceComponentUpdatingBehavior代替。我遵循了這個建議,最終我能夠獲得模型中的值。

有時我覺得Wicket是邪惡的:P

相關問題