Калитка: как установить проверенное значение в CheckBoxMultipleChoice - PullRequest
4 голосов
/ 09 мая 2011

Я использую wicket's 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 ]

3 голосов
/ 09 мая 2011

Я не пытался (и не могу) сделать это прямо сейчас, так что это нужно принимать с крошкой соли, но не могли бы вы использовать CheckGroup для этого?

Из JavaDoc:

Компонент, используемый для соединения экземпляров компонентов Check в группу.Экземпляры проверки должны находиться в иерархии компонентов где-то ниже группового компонента.Модель компонента CheckGroup должна быть экземпляром java.util.Collection.Коллекция моделей группы заполнена объектами моделей всех выбранных компонентов Check.

Таким образом,

new Checkgroup("group", choices)

должен работать для вас.Не нужно переопределять эту функциональность.

PS: Я проверю это, как только у меня появится возможность сделать это ...

1 голос
/ 18 января 2013

Ну, другой способ - использовать

checkBoxMultipleChoice.setDefaultModelObject(listOfAllElements); // Select all.
checkBoxMultipleChoice.setDefaultModelObject(Lists.newArrayList()); // Deselect all.
1 голос
/ 09 мая 2011

Вы можете использовать javascript для установки флажков.

Пример, использующий jQuery:

mycheck.setOutputMarkupId(true);
checkAll.add(new SimpleAttributeModifier("onclick",
    "$('#" + mycheck.getMarkupId() + " input:checkbox').attr('checked', $(this).is(':checked'))");
0 голосов
/ 23 апреля 2013

Я знаю, что вы уже нашли ответ, но в моем случае у меня была точно такая же проблема, но вариант использования CheckGroup был неосуществим, потому что мой список строился динамически, и в начале он даже мог быть пустым.

Ситуация для меня была такой:

  1. Я был вынужден использовать CheckBoxMultipleChoice , потому что он позволяет мне иметь пустые списки, что отражается в GUI.CheckGroups всегда будет печатать один флажок без метки, даже если параметры компонента пусты.
  2. Использование AjaxFormComponentUpdatingBehavior приведет к исключению, говорящему о том, что его можно использовать только в других компонентах.
  3. Использование OnChangeAjaxBehavior будет работать с селектором CheckBox (select / deselect), но если используется с CheckBoxMultipleChoice, то событие сработает, но фактические значения компонента не будут отражены в моделив рамках мероприятия.

Слава богу, я нашел Этот форум в Набл .

В основном здесь Педро Сантос предлагает вместо этого использовать AjaxFormChoiceComponentUpdatingBehavior .Я последовал совету и, наконец, смог получить значения в модели.

Иногда я думаю, что калитка злая: P

...