我是 vaadin 的新手。如何对无法加载到内存中的大量数据进行自动完成(实际上,更像谷歌建议),而是对每个关键事件执行 JPA 查询。是否可以在文本字段或组合框中捕获关键事件?
问问题
9503 次
6 回答
3
您可以查看 Henrik Paul 的SuperImmediateTextField,这是一个 Vaadin 插件,允许您在几秒钟内设置客户端到服务器的发布延迟。从那以后,通用的 Java 堆栈可以使流程尽可能顺畅。缓存、JPA 请求或其他东西。几秒钟的延迟至少会稍微减轻服务器端的负载。
于 2010-11-30T06:24:13.050 回答
2
如果您不想编写自定义客户端小部件或包含另一个附加组件,您可以稍微调整 Vaadin 的 ComboBox 以使其从数据库加载建议。你基本上必须做三件事来实现这一目标:
- 子类 com.vaadin.ui.ComboBox 并用您自己的实现覆盖其受保护的方法 ComboBox#buildFilter()。
- 使用非常有限的功能实现接口 com.vaadin.data.Container.Filter:您的过滤器只需要传输当前用户输入。
- 编写 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 ...");
于 2021-10-05T15:21:06.910 回答
0
即时 TextField 应该是您正在寻找的。看看 Sampler 演示: http ://demo.vaadin.com/sampler/#TextFieldTextChangeEvent
于 2011-09-12T12:38:10.823 回答
0
也许结帐这个插件:https ://vaadin.com/directory#!addon/suggestbox-add-on
附带:
服务器通信延迟,例如等待用户完成输入 n 毫秒
占位符文本,例如“在此处键入您的查询”
输入查询服务器的最小长度
于 2016-01-06T19:43:03.483 回答