嘿,我仍然在尝试改进自定义的Wicket向导,以显示以下状态的步骤:活动,已完成,待处理。因此isCompleted();
的信息应该返回正确的值。如果向导可以进入下一步,则引用previous question,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("")));
...
我不希望这个步骤完成&#34;直到填写每个字段。要检查条件,我必须为每个组件添加AjaxListener
,并将其状态检查到setComplete(boolean);
。
我可以从向导表单外部控制此流程吗?例如,ICondition
的实现还是另一种方式?因为基本上我无法进入下一步,因为我的所有文本字段都是 RequiredTextField
,并且无法跳过。
任何建议都非常感谢。
更新/解决方案
Component buttonbar = getForm().get(Wizard.BUTTONS_ID);
buttonbar.setOutputMarkupId(true);
只是get(Wizard.BUTTONS_ID);
无法工作。
感谢Sven Meier提示!
答案 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,这样向导按钮将始终是最新的。