2011-03-07 39 views
5

這一個問題,這樣的:handling to onchange event of AutoCompleteTextField in wicket在檢票口使用AutoCompleteTextField沒有String作爲通用型

我試圖使用AutoCompleteTextField使用自定義類作爲泛型類型,並且可以添加AjaxFormComponentUpdatingBehavior。我的意思是我想有一個

AutoCompleteTextField<SomeClass> myAutoComplete = ...; 

,之後添加AjaxFormComponentUpdatingBehavior:

myAutoComplete.add(new AjaxFormComponentUpdatingBehavior("onchange") { 

     @Override 
     protected void onUpdate(AjaxRequestTarget target) { 
      System.out.println("Value: "+getValue()); 

     } 
    }); 

的問題是,由於某種原因,並稱行爲令的形式嘗試設置模型對象與字符串(即使AutoCompleteTextField具有SomeClass的泛型類型),當onchange事件觸發時導致ClassCastException。

有沒有辦法使用AutoCompleteTextField而不是它AutoCompleteTextField<String>?我找不到任何例子。謝謝你的時間!

感謝用戶biziclop在這件事上的幫助。

回答

5

這與事件處理程序無關,它是由組件中缺少模型類型引起的。如果您使用的是PropertyModelCompoundPropertyModel

  1. 自動解決它:

    表單組件可以從3個來源導出模型類型。

  2. 接受它作爲額外的構造參數。
  3. 通過setType()方法。
  4. (如果沒有上述的應用,默認行爲是使用字符串或布爾的複選框。)

這是你的選擇,你可以選擇任何三個,但我想,我是更好比2,這是優於3

更新:你可能已經知道這一點,但如果你的自定義類是真正的定製,你還需要一個IConverter處理該字符串< - > SomeClass的轉換:可以或者在應用程序中註冊它,或者覆蓋組件的getConverter(Class<?> clazz)方法以返回它。

+0

但他正在使用方法1(AutoCompleteTextField myAutoComplete)? – bert 2011-03-08 08:23:32

+1

@bert不幸的是,沒有。 Wicket只解析實現'IObjectClassAwareModel'的模型的類型信息。 – biziclop 2011-03-08 11:14:43

+1

更新是關鍵。謝謝! – 2011-03-27 16:41:32