final Address address = new Addres();
Form form = new Form("addressInputForm");
this.add(form);
form.setOutputMarkupId(true);
FormComponent fc;
fc = new RequiredTextField("street", new AddressModel(new Model(address), AddressModelType.STREET_MODEL));
fc.add(StringValidator.maximumLength(30));
fc.setLabel(new ResourceModel("label.street"));
form.add(fc);
form.add(new AjaxButton("submitAddressInput", form){
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form){
System.out.println(address.toString());
}
@Override
protected void onError(AjaxRequestTarget target, Form<?> form){
//
}
});
AjaxEventBehavior behavior = new AjaxEventBehavior("keyup"){
@Override
protected void onEvent(AjaxRequestTarget target) {
System.out.println(address.toString());
}
};
form.add(behavior);
我创建了一个关于这个问题的小例子。
当人们在名为“street”的字段中插入一个值时,正如您可以从代码中获得的那样,它会激活行为并运行onEvent()方法。 onEvent()将打印出变量地址。不幸的是,address.street值为NULL。所以它打印出“Street:NULL”。
但是当用户点击提交数据的ajax按钮时,Wicket会将表单中的所有数据通过AddressModel加载到地址变量中。在那里,最终结果将是例如“街道:邦德街”。
我的问题是如何在AjaxEventBehavior案例中初始化将数据保存到地址变量的过程?
答案 0 :(得分:2)
使用AjaxFormComponentUpdatingBehavior,它将提交组件的值。