这个问题如下:handling to onchange event of AutoCompleteTextField in wicket
我正在尝试将AutoCompleteTextField与自定义类一起用作泛型类型,并添加AjaxFormComponentUpdatingBehavior。我的意思是我想要一个
AutoCompleteTextField<SomeClass> myAutoComplete = ...;
然后添加一个AjaxFormComponentUpdatingBehavior:
myAutoComplete.add(new AjaxFormComponentUpdatingBehavior("onchange") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
System.out.println( "Value: "+getValue() );
}
});
问题在于,由于某种原因,添加该行为会使表单尝试使用String设置模型对象(即使AutoCompleteTextField具有泛型类型的SomeClass),当onchange事件触发时会导致ClassCastException。
有没有办法AutoCompleteTextField
使用AutoCompleteTextField<String>
而不是{{1}}?我找不到任何例子。谢谢你的时间!
并感谢用户biziclop对此事的帮助。
答案 0 :(得分:5)
这与事件处理程序无关,它是由组件中缺少模型类型引起的。
表单组件可以从3个来源派生模型类型:
PropertyModel
或CompoundPropertyModel
,则自动解决。setType()
方法。这些是您的选择,您可以选择三种中的任何一种,但我认为1优于2,优于3。
更新:您可能已经知道这一点,但如果您的自定义类是自定义的,那么您还需要一个IConverter
来处理String&lt; - &gt; Someclass转换:您可以要么在应用程序中注册它,要么覆盖组件的getConverter(Class<?> clazz )
方法以返回它。