Как прочитать состояние PropertyModel списка из события onUpdate () AjaxCheckBox - Apache Wicket - PullRequest
0 голосов
/ 25 февраля 2011

Проблема: пользователь сделал некоторый выбор в списке множественного выбора, затем нажал флажок, и выбор потерян. Мне нужно сохранить выбор.

У меня есть мастер отчетов, который расширяется (wicket.extensions.wizard.Wizard) У меня есть шаг, который расширяет WizardStep.WizardStep На этом шаге у меня есть поле для выбора, которое расширяет wicket.markup.html.form.ListMultipleChoice Я добавляю это следующим образом:


final ChooseListMultipleChoice allPlansChoiceField = new ChooseListMultipleChoice(PLANS_SELECT_ALL_PLANS_LIST, new PropertyModel(this, "selectedAllPlans"), allPlans);
allPlansChoiceField.setOutputMarkupId(true);
add(allPlansChoiceField);

и у меня также есть AjaxCheckBox (wicket.ajax.markup.html.form.AjaxCheckBox) Используется так:


  AjaxCheckBox displayArchived = new AjaxCheckBox(DISPLAY_ARCHIVED){
            protected void onUpdate(final AjaxRequestTarget target) {
                allPlans.clear();
                final boolean isDisplayArchived = rawReportFilterInput.isDisplayArchived();
                List listAllPlan = projectFacade.listActiveAndClosingPlans(isSort, isDisplayArchived);
                allPlans.addAll(listAllPlan);
                target.addComponent(allPlansChoiceField);
            }
        };
        add(displayArchived);

внутри метода onUpdate модель selectedAllPlans не обновляется при текущем выборе пользователя. Например, если бы у меня была просто простая кнопка отправки ajax, то это вызвало бы событие onSubmit, и все данные формы были бы переданы, а «selectedAllPlans» заполнилось бы выбором пользователя. Мне нужно точно такое же поведение, когда пользователь проверяет / снимает флажок AjaxCheckBox. До сих пор я не смог заставить его работать, модель всегда имеет размер = 0.

разметка:

<div class="effortsReport" style="height: 220px;">
<table>
    <tr>
        <input type="checkbox" wicket:id="plansSelect.displayArchived">
        <br><div class="fixed_select"><select wicket:id="allPlansList"/></div></td>
    </tr>
</table>
</div>

Буду признателен за некоторые советы, возможные решения. С наилучшими пожеланиями, Олег

1 Ответ

1 голос
/ 01 марта 2011

Хорошо, я понял это, просто сделай это:

allPlansChoiceField.add(new AjaxFormComponentUpdatingBehavior("onchange") {
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            target.addComponent(allPlansChoiceField);
        }
    });

и все.Вам даже не нужно хранить / восстанавливать состояние, оно просто работает.Да, потребовалось время, чтобы это выяснить, но в конце концов это возможно и просто.Должен любить калитку.

...