2015-10-19 27 views
0

嘿,我仍然在尝试改进自定义Wicket向导以显示以下状态的步骤:活动,已完成,正在等待。因此isCompleted();的信息应该返回正确的值。如果向导可以转到下一步,则参考previous questionisComplete();返回true。
我该如何操作这些信息才能充分利用我的草稿?例如。在一个WizardStep中,我有多个输入字段。通过设置setComplete控制Wicket向导的流程(布尔值)

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);将无法​​正常工作。 感谢Sven Meier的提示!

回答

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,这样向导按钮将永远是最新的。

+0

仍在检查您的建议,但get(Wizard.BUTTONS_ID).setOutputMarkupId(true);抛出空指针异常。 –

+0

此行'((AjaxRequestTarget)event.getPayload())add(get(Wizard.BUTTONS_ID));'抛出空指针,但它似乎工作,我怎样才能避免null poiner? –