嘿,我仍然在尝试改进自定义Wicket向导,以显示以下状态的步骤:活动,完成,挂起。因此,isCompleted();
的信息应该返回正确的值。参考前面的问题,如果向导可以进入下一步,则isComplete();
返回true。
我怎样才能操纵这些信息来充分利用我的草稿呢?例如,在一个WizardStep中,我有多个输入字段。
super(new ResourceModel("daten.title"), new ResourceModel("daten.summary"));
java.util.Collections.addAll(sprachen, "Deutsch","English","Français","Italiano");
add(name = new RequiredTextField<String>("name", Model.of("")));
add(vorname = new RequiredTextField<String>("vorname", Model.of("")));
add(strasse = new RequiredTextField<String>("strasse", Model.of("")));
add(ort = new RequiredTextField<String>("ort", Model.of("")));
...
我不希望在每个字段都填满之前步骤"被完成"。为了检查条件,我必须向每个组件添加一个AjaxListener
,并检查它的状态为setComplete(boolean);
。
我可以从向导表单外部控制此流吗?例如,ICondition
的实现还是有其他方法?因为基本上我不能进入下一步,因为我所有的文本字段都是 RequiredTextField
,不能跳过。如有任何建议,我们都非常感谢。
更新/解决方案
Component buttonbar = getForm().get(Wizard.BUTTONS_ID);
buttonbar.setOutputMarkupId(true);
仅仅get(Wizard.BUTTONS_ID);
不行。感谢斯文·梅尔的提示!
你必须添加一个AjaxFormComponentUpdatingBehavior到所有的表单组件。
然后在向导中重写#onEvent():
public MyWizard(id, WizardModel model) {
super(id, model);
get(Wizard.BUTTONS_ID).setOutputMarkupId(true);
}
public void onEvent(IEvent<?> event) {
if (event.getPayload() instanceof AjaxRequestTarget) {
((AjaxRequestTarget)event.getPayload()).add(get(Wizard.BUTTONS_ID));
}
}
让您的step#isComplete()根据其模型值返回true,这样向导按钮将始终是最新的