Java Vaadin 7组合框-键入文本时如何填充和下拉?
我有一个应用程序,它有各种数据库记录的编辑器。这些记录相互引用。我正在开发一个基于ComboBox的新的自定义数据感知组件:Java Vaadin 7组合框-键入文本时如何填充和下拉?,java,combobox,vaadin7,Java,Combobox,Vaadin7,我有一个应用程序,它有各种数据库记录的编辑器。这些记录相互引用。我正在开发一个基于ComboBox的新的自定义数据感知组件: public abstract class CustomDbLookupField<T> extends CustomField<T> implements Field<T> 但我不知道该把什么作为参数目标和方法。这是一个好问题,几句话也回答不了。我会先给你一个简短的回答,然后再详细说明。我目前正在编写一个小示例来演示您想要实现的功
public abstract class CustomDbLookupField<T> extends CustomField<T> implements Field<T>
但我不知道该把什么作为参数目标和方法。这是一个好问题,几句话也回答不了。我会先给你一个简短的回答,然后再详细说明。我目前正在编写一个小示例来演示您想要实现的功能。但我还需要一些时间。一有结果,我就会更新我的答案 在此之前,您的问题的简短答案是,如果您在组件上注册TextChangeEvents的侦听器,您将需要有人实际触发这些事件。这通常发生在客户端,例如在
TextField
中。当您从CustomField
派生时,仍然需要提供一些客户端实现CustomField
只是自定义字段实现的基本实现,没有大量现成的客户端功能。因此,在您的情况下,textchangevents
的侦听器实际上永远不会被调用
通过从ComboBox派生,您可以做得更简单。ComboBox已经内置了在ComboBox中键入文本时对前缀过滤的支持。实际的过滤器功能在容器中实现,该容器是组合框的数据源。诀窍是覆盖受保护的方法组合框#getOptionsWithFilter(boolean)
在数据库中进行筛选,并使用自定义的容器
实现从数据库中提供筛选项
更新:正如我承诺的那样,我已经编写了一个小的演示应用程序,它展示了如何编写自定义组合框,当用户在文本中键入时,可以从数据库中动态填充其项。这可以通过从ComboBox
派生并覆盖方法com.vaadin.ui.ComboBox.buildFilter(String,FilteringMode)
来实现。被重写的方法将需要返回一个自定义的Container.Filter
实现,该实现只将当前筛选器字符串传递给一个自定义的com.vaadin.data.Container
实现。然后,容器负责从数据库中获取过滤后的项,并用查询结果填充自身。在我的示例中,我从BeanItemContainer
派生,在这里我在重写的方法de.oio.vaadin.SuggestingContainer.addFilter(Filter)
您可以在查看演示。如果有什么不清楚的地方,请不要犹豫。我接受这个答案,因为这是唯一的答案,至少这解释了为什么它不起作用。我发现特别令人不安的是,任何人都可以注册任何事件,即使它对组件无效。我不会编写自定义Javascript模块。我最终使用了PopupButton和TextField+ListSelect的组合。看起来不太好,但至少它是开箱即用的。
cmb.addListener(com.vaadin.event.FieldEvents.TextChangeEvent.class,target, method);