Java 在wicket中使用不带字符串的AutoCompleteTextField作为泛型类型

Java 在wicket中使用不带字符串的AutoCompleteTextField作为泛型类型,java,web-applications,autocomplete,wicket,Java,Web Applications,Autocomplete,Wicket,问题如下: 我试图使用AutoCompleteTextField和一个自定义类作为泛型类型,并添加一个AjaxFormComponentUpdateingBehavior。我的意思是我想要一个 AutoCompleteTextField<SomeClass> myAutoComplete = ...; 问题在于,出于某种原因,添加该行为会使表单尝试使用字符串设置模型对象(即使AutoCompleteTextField具有SomeClass的泛型类型),从而在触发onchange事件

问题如下:

我试图使用AutoCompleteTextField和一个自定义类作为泛型类型,并添加一个AjaxFormComponentUpdateingBehavior。我的意思是我想要一个

AutoCompleteTextField<SomeClass> myAutoComplete = ...;
问题在于,出于某种原因,添加该行为会使表单尝试使用字符串设置模型对象(即使AutoCompleteTextField具有SomeClass的泛型类型),从而在触发onchange事件时导致ClassCastException

有没有一种方法可以使用
AutoCompleteTextField
而不使用
AutoCompleteTextField
?我找不到任何例子。谢谢你的时间


感谢用户在这方面的帮助。

这与事件处理程序无关,是由于组件中缺少模型类型集造成的

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

  • 如果您使用的是
    PropertyModel
    CompoundPropertyModel
    ,请自动解析它
  • 接受它作为附加构造函数参数
  • 通过
    setType()
    方法
  • (如果上述任何一项都不适用,默认行为是使用字符串或布尔值作为复选框。)
  • 这是你的选择,你可以从三个选项中选择任何一个,但我认为1比2好,2比3好


    更新:您可能已经知道这一点,但是如果您的自定义类是真正自定义的,那么您还需要一个处理StringSomeclass转换的
    IConverter
    :您可以向应用程序注册它,也可以覆盖组件的
    getConverter(class clazz)
    方法返回它。

    但他正在使用方法1和(AutoCompleteTextField myAutoComplete)?@bert不幸的是,没有。Wicket只解析实现
    IObjectClassAwareModel
    的模型的类型信息。更新是关键。谢谢
    myAutoComplete.add(new AjaxFormComponentUpdatingBehavior("onchange") {
    
            @Override
            protected void onUpdate(AjaxRequestTarget target) {
                System.out.println( "Value: "+getValue() );
    
            }
        });