问题:用户在多选列表框中进行了一些选择,然后按下复选框,选择丢失。我需要保留选择。
我有一个扩展的报告向导(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>
我很感激一些建议,可能的解决方案。 最好的祝福, 奥列格
答案 0 :(得分:1)
好的,我想通了,就这样做:
allPlansChoiceField.add(new AjaxFormComponentUpdatingBehavior("onchange") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
target.addComponent(allPlansChoiceField);
}
});
就是这样。你甚至不需要存储/恢复状态,它只是工作。是的,需要时间才能找到它,但最终可能也很容易。得爱Wicket。