5

複雑なクエリに基づいてデータを入力するテーブルを含むページがあります(ページネーションを使用しても時間がかかります)。BeanItemcontainer を使用してデータをテーブルにロードします。ここで問題が発生しましたが、非同期の方法でテーブルにデータをロードしたいと考えています(完全なページがユーザー画面にロードされた後、データを入力したい)。これを達成するために使用できる onPageLoad イベントまたは onPageRenderEvent または同等のものはありますか?

詳細 -

バージョン - Vaadin -7.0
コンポーネント - テーブル
データ コンテナー - BeanItemContainer。

4

2 に答える 2

4

これを解決する方法はいくつかありますが、問題にどのように取り組むかを決める必要があります。これが私が知っている2つです:

1)クライアントからのリクエスト。
2)サーバーからプッシュします。(技術的にはまだクライアントからのリクエスト)

1 --A)クライアント側でプログラムされたJavascript関数からのリクエスト。Javascript拡張機能またはJavascriptコンポーネントを使用してコンポーネントをレイアウトにアタッチし、サーバー側のAPI関数を呼び出してリクエストを行います。その後、そのリクエスト内でテーブルを更新でき、同期の問題について心配する必要はありません。

1 --B)1Aを実行するために独自のGWT / Vaadinウィジェット(基本的に同じもの)を作成します。

2-A)「サーバー側」でプログラムされたVaadinコンポーネントからの要求。サーバーをポーリングする表示(または非表示)の進行状況インジケーターを作成します。バックグラウンドスレッドでテーブルにデータを入力すると、Vaadinは現在収集したデータを送信します。進行状況インジケーターはこれを何度も実行でき、テーブルは差をクライアント側のコード(デルタと呼ばれる)にのみ送信します。バックグラウンドスレッドからクライアント向けコンポーネントを更新する場合は注意が必要です。同時変更エラーを回避するには、コンポーネントへの変更を同期する必要があります。

2--B)アプリケーションにリフレッシャーを追加し、進行状況インジケーターを必要とせずに上記の2Aに従います。

どちらのソリューションでも、バックグラウンドスレッド(2A、B)またはクライアントから呼び出されたサーバーメソッド(1A、B)のいずれかで、テーブルを明示的に更新する必要があります。そして、どちらも技術的にはクライアントリクエストベースです。Vaadinチームは、真の「プッシュ」の追加に取り組んでいます。

于 2013-03-19T23:29:34.550 に答える
0

この問題を解決するVaadinの方法は、遅延読み込みコンテナを使用することです。Vaadinで使用できる遅延読み込みコンテナはいくつかあります。コアのSQLContainer、 LazyQueryContainerJPAContainerです。

于 2013-03-20T09:45:51.377 に答える