更新 II: OK、少し絞り込むことができました。
ソート機能とフィルタリング機能を備えたデータテーブルを含むページがあり、どちらもDBで行われます。つまり、私が使用する rich:datatable の組み込み機能は使用せず、DB に作業を任せます。
私はリクエストスコープのBeanを扱っています。セッション スコープの Bean だけに、インターフェイスの並べ替えとフィルタリングが含まれています。
各列のフィルタリングは、特定のセッション Bean フィールドにバインドされています。そのため、モデル値の更新フェーズで実際に更新されます。
ソートにはいくつかのロジックが必要だったので、特定のメソッドを呼び出して、セッション Bean に正しい値を設定しました。これは、Invoke Application フェーズで実行されます。
そのため、変更は、ページが実際にレンダリングされる Render Response フェーズで行われます。
問題は、ページ内の JSF データテーブルとデータスクローラーがbackingBean.getDataModel()
、DB からデータを取得するdataModel.getRowCount()
を呼び出し、(別のクエリを実行するメソッドを呼び出すために実装した)も要求値の適用フェーズ中に呼び出すことです。これら 2 つのクエリは、Render Response フェーズでも行われます。これは、すべての変更が行われる唯一のフェーズであり、クエリは正常に実行されます。
これは、フィルタリングまたはソートを実行した後にページを表示するために、2 倍の数のクエリが発生することを意味します。
必要なクエリのみを実行し、それ以上は実行せずに、並べ替えとフィルター処理を実行したいと考えています。
助言がありますか?