2012-10-17 43 views
0
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); 

我創建了一個關於這個問題的例子。Wicket 6.1 AjaxEventBehavior和窗體組件與模型

基本上,當人員在名爲「street」的字段中插入一個值時,您可以從代碼中期望它激活行爲並運行onEvent()方法。 onEvent()會打印出變量地址。不幸的是address.street的值是NULL。所以它打印出「街道:NULL」。

但是當用戶點擊提交數據的ajax按鈕時,Wicket會通過AddressModel將表單中的所有數據加載到地址變量中。在那裏最終的結果將是例如「街道:邦德街」。

我的問題是,我可以如何啓動在AjaxEventBehavior情況下將數據保存到地址變量的過程?

回答

2

使用將提交組件值的AjaxFormComponentUpdatingBehavior。