如何从AjaxCheckBox的onUpdate()事件中读取列表框的PropertyModel状态--Apache Wicket

时间:2011-02-25 16:22:29

标签: ajax forms checkbox submit wicket

问题:用户在多选列表框中进行了一些选择,然后按下复选框,选择丢失。我需要保留选择。

我有一个扩展的报告向导(wicket.extensions.wizard.Wizard) 我有一个扩展WizardStep.WizardStep的步骤 在这一步,我有一个mutli-selection框,它扩展了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 submit buttom,那么它会触发onSubmit事件并且所有表单数据都将被传递,并且“selectedAllPlans”将填充用户选择。 当用户检查/取消选中AjaxCheckBox时,我需要完全相同的行为。到目前为止,我还没能使它工作,模型总是size = 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 个答案:

答案 0 :(得分:1)

好的,我想通了,就这样做:

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

就是这样。你甚至不需要存储/恢复状态,它只是工作。是的,需要时间才能找到它,但最终可能也很容易。得爱Wicket。