当前位置: 首页 > 面试题库 >

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

龚凯泽
2023-03-14
问题内容

我正在尝试将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>?我找不到任何例子。谢谢你的时间!


问题答案:

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

表单组件可以从3个来源中得出模型类型:

  1. 如果使用PropertyModel或,则自动解决CompoundPropertyModel
  2. 接受它作为其他构造函数参数。
  3. 通过该setType()方法。
  4. (如果以上都不适用,则默认行为是对复选框使用String或Boolean。)

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

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



 类似资料:
  • 我想使用泛型类作为另一个泛型类的类型参数。 起初,我对类的定义是这样的: 然后我的需求发生了变化,我不得不为我的R类型使用包装器/持有者类 到目前为止,我的尝试:(给出编译时错误:

  • 我有一个从数组中检索元素的方法,我想对几个基元类型(int[]、double[]、...)使用相同的方法。方法如下: 但是,如何获取数据的类型以使用适当的基元类型实例化selectedElements数组? 非常感谢

  • 问题内容: 除了Swift,我还有这个问题。如何Type在泛型中使用变量? 我尝试了这个: This didn’t work either: 有没有办法做到这一点?我感觉到Swift只是不支持 它,并且给了我一些模棱两可的错误消息。 编辑:这是一个更复杂的示例,其中无法 使用通用函数标头来解决问题。当然,这没有任何意义, 但是我在代码中的某处合理地使用了这种功能 ,宁愿发布一个干净的示例而不是我的

  • 我在我的一个实用程序类中有一个方法,它接受一个集合和一个类对象,并返回一个Iterable实例,该实例可以遍历作为指定类实例的集合的所有成员。其签名为: 这对于大多数用例都非常有效,但现在我需要将其与泛型类

  • 问题内容: 我正在使用GSON将JSON解码为T类型的对象,例如 但是,这将返回异常- java.lang.AssertionError:意外的类型。预期为以下之一:java.lang.reflect.ParameterizedType,java.lang.reflect.GenericArrayType,但得到:sun.reflect.generics.reflectiveObjects.Typ

  • 我有一个场景,我必须使用Mapstrt将对象(来自网络请求)转换为对象(数据层)来处理对象映射。我正在尝试创建一个通用的接口,以防止必须为每个资源定义自定义映射器,如下所示: 但这会导致构建错误(但是编译成功): 错误:(13,4)错误:无法为泛型类型变量源生成映射方法。 这不可能吗?如果没有,我将不得不为每个创建一个自定义映射器,并使用根据类类型等告诉反序列化器要使用哪个映射器。。。它可能会变得