【问题标题】:using AutoCompleteTextField in wicket without String as the generic type在检票口中使用 AutoCompleteTextField 而没有 String 作为泛型类型
【发布时间】:2011-07-10 17:38:37
【问题描述】:

这个问题如下: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&lt;String&gt;?我找不到任何例子。感谢您的宝贵时间!

感谢用户biziclop在这件事上的帮助。

【问题讨论】:

    标签: java web-applications autocomplete wicket


    【解决方案1】:

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

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

    1. 如果您使用的是PropertyModelCompoundPropertyModel,请自动解决它。
    2. 接受它作为附加的构造函数参数。
    3. 通过setType() 方法。
    4. (如果以上都不适用,则默认行为是使用字符串或布尔值作为复选框。)

    这些是你的选择,你可以选择三个中的任何一个,但我认为1比2好,比3好。

    更新:您可能已经知道这一点,但如果您的自定义类确实是自定义的,您还需要一个处理 StringSomeclass 转换的IConverter:您可以注册它使用应用程序或覆盖组件的 getConverter(Class&lt;?&gt; clazz ) 方法以返回它。

    【讨论】:

    • 但他正在使用方法 1 和 (AutoCompleteTextField myAutoComplete) ?
    • @bert 不幸的是,没有。 Wicket 仅解析来自实现 IObjectClassAwareModel 的模型的类型信息。
    • 更新是关键。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2011-07-10
    • 2021-12-06
    • 1970-01-01
    相关资源
    最近更新 更多