4

我是 vaadin 的新手。如何对无法加载到内存中的大量数据进行自动完成(实际上,更像谷歌建议),而是对每个关键事件执行 JPA 查询。是否可以在文本字段或组合框中捕获关键事件?

4

6 回答 6

3

您可以查看 Henrik Paul 的SuperImmediateTextField,这是一个 Vaadin 插件,允许您在几秒钟内设置客户端到服务器的发布延迟。从那以后,通用的 Java 堆栈可以使流程尽可能顺畅。缓存、JPA 请求或其他东西。几秒钟的延迟至少会稍微减轻服务器端的负载。

于 2010-11-30T06:24:13.050 回答
2

如果您不想编写自定义客户端小部件或包含另一个附加组件,您可以稍微调整 Vaadin 的 ComboBox 以使其从数据库加载建议。你基本上必须做三件事来实现这一目标:

  1. 子类 com.vaadin.ui.ComboBox 并用您自己的实现覆盖其受保护的方法 ComboBox#buildFilter()。
  2. 使用非常有限的功能实现接口 com.vaadin.data.Container.Filter:您的过滤器只需要传输当前用户输入。
  3. 编写 com.vaadin.data.Container 的实现来执行实际的过滤器逻辑。

我在一篇博文中更详细地描述了如何做到这一点。

于 2015-01-17T15:54:36.840 回答
1

Vaadin 自动完成插件可用于实现此目的。看看这个:-https://vaadin.com/directory/component/autocomplete

下面的例子:

   Autocomplete autocomplete = new Autocomplete();

    autocomplete.setLimit(5);

    autocomplete.addChangeListener(event -> {
        String text = event.getValue();
        autocomplete.setOptions(findOptions(text));
    });

    autocomplete.addChangeListener(event -> {
        refreshContent(event.getValue());
    });

    autocomplete.addValueClearListener(event -> {
        peopleGrid.setItems(Collections.EMPTY_LIST);
    });

    autocomplete.setLabel("Find what you want:");
    autocomplete.setPlaceholder("search ...");

完整代码如下: https ://github.com/vaadin-component-factory/autocomplete/blob/master/autocomplete-demo/src/main/java/com/vaadin/componentfactory/demo/AutocompleteView.java#L132

于 2021-10-05T15:21:06.910 回答
0

即时 TextField 应该是您正在寻找的。看看 Sampler 演示: http ://demo.vaadin.com/sampler/#TextFieldTextChangeEvent

于 2011-09-12T12:38:10.823 回答
0

您可能会发现此链接很有帮助。我想这将在 6.5 中得到修复。如果您想检查,还有一个插件。

你需要考虑这一点

字段值 -> json -> vaadin servlet -> 服务(spring/ejb/pojo 或其他) -> JPA -> 查询 -> 结果列表(最初可能很大)

每次按键都会返回浏览器...

想想最终用户的打字速度。当第一次击键的响应从服务器返回时,用户可能已经完成了整个单词。

于 2010-11-30T00:55:28.020 回答
0

也许结帐这个插件:https ://vaadin.com/directory#!addon/suggestbox-add-on

附带:

服务器通信延迟,例如等待用户完成输入 n 毫秒

占位符文本,例如“在此处键入您的查询”

输入查询服务器的最小长度

于 2016-01-06T19:43:03.483 回答