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

时间:2011-03-07 23:17:50

标签: java web-applications autocomplete wicket

这个问题如下: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对此事的帮助。

1 个答案:

答案 0 :(得分:5)

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

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

  1. 如果您使用PropertyModelCompoundPropertyModel,则自动解决。
  2. 将其作为附加构造函数参数接受。
  3. 通过setType()方法。
  4. (如果以上都不适用,默认行为是使用String,或布尔值用于复选框。)
  5. 这些是您的选择,您可以选择三种中的任何一种,但我认为1优于2,优于3。

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