4

次のサイズのさまざまなテーブルがあります: 12 列、最大 1800 行。ユーザーにレンダリングするのに 8 秒かかります。私は現在使用していますh:dataTableui:repeatJSF によって管理されている Java List オブジェクトから行データを取得しようとしました。これは正常に機能しますが、テーブルをレンダリングするのに 8 秒かかることは受け入れられません。これを行う他の方法を見つけようとしていますが、ページのアクションボタンJSFとして保持する必要があります。つまり、マネージ Bean のメソッドに「テーブル マークアップページ自分で h:commandButtons controller」を作成したいということです。これを行う方法はありますか? to send to theand then still associate actions on

私が考えることができる唯一の方法は、テーブル マークアップを使用jqueryまたはajax作成することですが、私は UI 開発のための JSF 以外のテクノロジに慣れていません。唯一の問題は、リストからマークアップを生成する方法がわからないことと、h:commandButtons現在XHTMLファイルにあるマークアップの間にそれを挿入する方法がわからないことです。

JSFを完全に取り除かなくても、これを解決する方法を知っている人はいますか? 私が抱えている主な問題の 1 つは 、データテーブルをページングできないというビジネス要件です (つまり、一度に 100 個を表示する [次へ] / [戻る] ボタンなど)。したがって、おそらく私は、サーバーへの Ajax 呼び出しによってこれを実行し、ページの準備が整った後に一度に 100 行を取得し、舞台裏で新しい行をユーザーに追加できると考えていました。これは「認識された」負荷速度ですが、これを行う方法がまったくわかりません。


1 つの解決策は、次のように SQL クエリを調整することです。

SELECT variety AS optionValue, variety AS optionDisplay FROM fruit WHERE name = ? ORDER BY variety

別のアプローチは、各行を個別に解析し、手動で配列を構築することです。だから代わりに

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

あなたが使用できる

$rows = array();
while( $row = $stmt->fetch(PDO::FETCH_ASSOC) ) {
  $rows[] = array( 'optionValue' => $row['variety'], 'optionDisplay' => $row['variety'] );
}
4

1 に答える 1

0

12 列で 1800 行という膨大な数の場合、8 秒は悪くありません。10~100行が1秒もかからないですよね?

これを続行する前に、これらの 1800 行すべてが一度に表示されることになっていることに絶対に確信がありますか? これは非常にユーザーフレンドリーではありませんか?ユーザーが探している情報を見つけるために Ctrl+F を押す必要はありませんか? それは迷惑ではありませんか?無数の結果を正気でユーザーフレンドリーな方法で表示するために Google が行っているのとまったく同じように、フィルタリング (検索フィールド) とページネーションを導入してみませんか?

とにかく、 PrimeFaces の「オンデマンドデータ」オプションの使用を検討できます<p:dataTable>。データは、スクロール中に ajax によってロードされ<p:dataTable liveScroll="true">ます。ショーケースの例も参照してください。自家製のコードも、jQuery を手動でいじる必要もありません。PrimeFaces はそれをすべて裏で行っています。

何らかの理由で PrimeFaces を使用したくない場合は、OmniFaces <o:componentIdParam>を jQuery の「ライブ スクロール」プラグインと組み合わせて使用​​することを検討できます。キックオフの例については、(スナップショット) ショーケース ページの最後の例も参照してください(クリックではなく、スクロールの下部を押すことでトリガーされるように簡単に調整する必要があります)。

于 2012-10-19T14:49:42.307 に答える