通过设置 setComplete(布尔值)来控制检票口向导的流



嘿,我仍然在尝试改进自定义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,这样向导按钮将始终是最新的

最新更新