通过设置setComplete(boolean)来控制Wicket向导的流程

时间:2015-10-19 15:06:20

标签: wicket conditional-statements wizard

嘿,我仍然在尝试改进自定义的Wicket向导,以显示以下状态的步骤:活动,已完成,待处理。因此isCompleted();的信息应该返回正确的值。如果向导可以进入下一步,则引用previous questionisComplete();将返回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("")));
...

我不希望这个步骤完成&#34;直到填写每个字段。要检查条件,我必须为每个组件添加AjaxListener,并将其状态检查到setComplete(boolean);
我可以从向导表单外部控制此流程吗?例如,ICondition的实现还是另一种方式?因为基本上我无法进入下一步,因为我的所有文本字段都是 RequiredTextField ,并且无法跳过。
任何建议都非常感谢。

更新/解决方案

Component buttonbar = getForm().get(Wizard.BUTTONS_ID);
buttonbar.setOutputMarkupId(true);

只是get(Wizard.BUTTONS_ID);无法工作。 感谢Sven Meier提示!

1 个答案:

答案 0 :(得分:1)

您必须向所有表单组件添加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));
    }
}

让你的步骤#isComplete()根据其模型值返回true,这样向导按钮将始终是最新的。