ヴァーディンのオートコンプリート?
-
29-09-2019 - |
質問
私はヴァーディンに慣れています。メモリにロードできないが、すべてのキーイベントでJPAクエリを実行する膨大なデータセットで、自動コンプリート(実際にはGoogleのように)を実行するにはどうすればよいですか。テキストフィールドまたはコンボボックスで重要なイベントをキャプチャすることは可能ですか?
解決
ヘンリックポールのチェックアウトできます SuperimMediateTextfield, 、これは、秒でクライアントからサーバーへのポスト遅延を設定できるVaadinアドオンです。それから、一般的なJavaスタックが可能な限りスムーズになります。キャッシュ、JPAリクエストなど。 2秒の遅延は、少なくともサーバー側への負荷をわずかに減らします。
他のヒント
あなたはこれを見つけるかもしれません リンク 役に立った。これは6.5に修正されていると思います。またあります アドオン 確認したい場合。
ただし、これを考慮する必要があります
フィールド値 - > json-> vaadinサーブレット - >サービス(spring/ejb/pojoなど) - > jpa-> query-> resultリスト(最初は巨大な場合があります)
そして、これはキープレスごとにブラウザに戻ります...
エンドユーザーのタイピング速度について考えてください。 1番目のキーストロークの応答がサーバーから戻ってくるまでに、ユーザーは単語全体を完成させた可能性があります。
インスタントテキストフィールドはあなたが探しているものでなければなりません。サンプラーデモをご覧ください。http://demo.vaadin.com/sampler/#textfieldtextchangeevent
カスタムクライアント側のウィジェットを書きたくない場合、または別のアドオンを含めたくない場合は、Vaadinのコンボボックスを少し調整して、データベースから提案を読み込むことができます。あなたは基本的にそれを達成するために3つのことをしなければなりません:
- Subclass com.vaadin.ui.comboboxとその保護されたメソッドCombobox#buildfilter()を独自の実装で上書きします。
- インターフェイスcom.vaadin.data.container.filterを非常に制限された機能を実装します。フィルターは、現在のユーザー入力を輸送するだけで必要です。
- 実際のフィルターロジックを実行するcom.vaadin.data.containerの実装を作成します。
私はそれをより詳細に行う方法を説明しました ブログ投稿で.
多分このアドオンをチェックアウトしてください: https://vaadin.com/directory#!addon/suggestbox-add-on
付属:
サーバー通信の遅延、たとえば、ユーザーがnミリ秒の入力が終了するまで待つ
「ここにクエリを入力する」などのプレースホルダーテキスト
サーバーをクエリするための入力の最小長