在没有String的wicket中使用AutoCompleteTextField作为generics类型

这个问题是这样的: 处理wicket中的AutoCompleteTextField的onchange事件

我正在尝试将AutoCompleteTextField与自定义类一起用作generics类型,并添加AjaxFormComponentUpdatingBehavior。 我的意思是我想要一个

AutoCompleteTextField myAutoComplete = ...; 

然后添加一个AjaxFormComponentUpdatingBehavior:

 myAutoComplete.add(new AjaxFormComponentUpdatingBehavior("onchange") { @Override protected void onUpdate(AjaxRequestTarget target) { System.out.println( "Value: "+getValue() ); } }); 

问题在于,由于某种原因,添加该行为会使表单尝试使用String设置模型对象(即使AutoCompleteTextField具有generics类型的SomeClass),当onchange事件触发时会导致ClassCastException。

有没有办法使用AutoCompleteTextField而不是AutoCompleteTextField ? 我找不到任何例子。 谢谢你的时间!

并感谢用户biziclop在这件事上的帮助。

这与事件处理程序无关,它是由组件中缺少模型类型引起的。

表单组件可以从3个来源派生模型类型:

  1. 如果您正在使用PropertyModelCompoundPropertyModel ,请自动解决它。
  2. 接受它作为附加的构造函数参数。
  3. 通过setType()方法。
  4. (如果以上都不适用,则默认行为是使用String,或使用Boolean作为复选框。)

这些是你的选择,你可以选择三种中的任何一种,但我认为1优于2,优于3。

更新:您可能已经知道这一点,但如果您的自定义类是自定义的,您还需要一个处理String < - > Someclass转换的IConverter :您可以将其注册到应用程序或覆盖组件的getConverter(Class clazz )方法返回它。