在没有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个来源派生模型类型:
- 如果您正在使用
PropertyModel
或CompoundPropertyModel
,请自动解决它。 - 接受它作为附加的构造函数参数。
- 通过
setType()
方法。 - (如果以上都不适用,则默认行为是使用String,或使用Boolean作为复选框。)
这些是你的选择,你可以选择三种中的任何一种,但我认为1优于2,优于3。
更新:您可能已经知道这一点,但如果您的自定义类是自定义的,您还需要一个处理String < - > Someclass转换的IConverter
:您可以将其注册到应用程序或覆盖组件的getConverter(Class> clazz )
方法返回它。