私はvaadinに不慣れです。メモリにロードできない膨大なデータセットに対してオートコンプリート(実際には、Googleが提案するようなもの)を実行するにはどうすればよいですか?代わりに、すべてのキーイベントに対してJPAクエリを実行します。テキストフィールドまたはコンボボックスで重要なイベントをキャプチャすることは可能ですか?
6 に答える
Henrik PaulのSuperImmediateTextFieldをチェックできます。これは、クライアントからサーバーへのポスト遅延を秒単位で設定できるVaadinアドオンです。それ以降、フローを可能な限りスムーズにするのが一般的なJavaスタックです。キャッシング、JPAリクエストなど。数秒の遅延により、サーバー側への負荷が少なくともわずかに減少します。
カスタムのクライアント側ウィジェットを作成したり、別のアドオンを含めたりしたくない場合は、VaadinのComboBoxを少し調整して、データベースから提案をロードすることができます。それを達成するには、基本的に3つのことを行う必要があります。
- com.vaadin.ui.ComboBoxをサブクラス化し、その保護されたメソッドComboBox#buildFilter()を独自の実装で上書きします。
- 非常に制限された機能でインターフェースcom.vaadin.data.Container.Filterを実装します。フィルターは現在のユーザー入力のみを転送する必要があります。
- 実際のフィルターロジックを実行するcom.vaadin.data.Containerの実装を記述します。
これを行う方法については、ブログ投稿で詳しく説明しました。
これを実現するために、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 ...");
このリンクが役立つ場合があります。これは6.5で修正されていると思います。チェックしたい場合はアドオンもあります。
ただし、これを考慮する必要があります
フィールド値->json->vaadinサーブレット->サービス(spring / ejb / pojoなど)-> JPA->クエリ->結果リスト(最初は膨大な場合があります)
これは、キーを押すたびにブラウザに戻ります...
エンドユーザーのタイピング速度について考えてください。最初のキーストロークの応答がサーバーから返されるまでに、ユーザーは単語全体を完了している可能性があります。
インスタントTextFieldはあなたが探しているものでなければなりません。サンプラーのデモをご覧ください:http: //demo.vaadin.com/sampler/#TextFieldTextChangeEvent
多分このアドオンをチェックアウトしてください:https ://vaadin.com/directory#!addon / suggestbox-add-on
付属:
サーバー通信の遅延。たとえば、ユーザーがnミリ秒入力を終了するまで待機します。
「ここにクエリを入力してください」のようなプレースホルダーテキスト
サーバーにクエリを実行するための入力の最小長