4

データベースクエリを直接使用する代わりに、Web サービスを使用するように変換するJSFアプリケーションがあります。以前は単純な SQL クエリで簡単に返すことができた非常に長いリストがいくつかあります。JSF/Web サービスを使用してページングを実装する方法を理解したいと思います。ページ化された Web サービスを実行するための適切な設計パターンはありますか?

問題があれば、私は現在、JSF のApache MyFaces参照実装を Tomahawk 拡張機能 (MyFaces 開発チームが Apache に寄付する前に作成した JSF コンポーネントのセット) とともに使用しています。

4

5 に答える 5

3

クライアント側またはサーバー側のどちらのページングを行うかによって異なります。サーバー側の場合、Web サービスには、取得するデータの「ページ」を指定できるいくつかの追加パラメーター (「startFrom」と「pageSize」など) を含める必要があります。ページング コントロールを生成できるように、サービスはおそらく結果の合計サイズも返す必要があります。

手間がかかりすぎると判断した場合は、バッキング Bean でクライアント側のページングを実行できます (または、コンポーネントにそれを実行してもらいます)。ただし、何千ものオブジェクトについて話している場合はお勧めできません。

于 2008-09-16T14:44:13.873 に答える
2

SeamのQueryオブジェクトが好きです:http://docs.jboss.com/seam/2.1.0.BETA1/reference/en-US/html_single/#d0e7527

これらは基本的に、JSFが簡単に使用できるSeamコンポーネント内のすべてのSQL/JPAを抽象化します。

SeamやJPAを使用したくない場合は、同様のパターンを実装できます。

于 2008-09-16T07:22:57.943 に答える
2

Trinidadには、ページングをサポートするテーブルコンポーネントがあり、これが役立つ場合があります。これは理想的ではありませんが、 PeteMuirのBackingTrinidadのdataTablewith Seamブログ投稿で説明されているように、Seamで十分に機能します。

必要なJSFコンポーネントが見つからない場合は、EJB-QL(JPA)クエリで制限オフセットのパラメーターを設定するための独自のロジックを作成する必要があります。

于 2008-09-16T07:23:36.210 に答える
2

RichFaces ライブラリの Datatable を使用しました: http://livedemo.exadel.com/richfaces-demo/richfaces/dataTable.jsf?tab=usage

非常にシンプルで、RichFaces をまだ使用していない場合でも、MyFaces との統合は非常に簡単です。

于 2008-09-17T01:38:40.960 に答える
1

一度に Web サービスからすべての結果を取得していて、実際の Web サービス呼び出しにページ付けを含めることができない場合は、アイテムのリストをマネージド Bean のプロパティに設定してみてください。次に、それを Tomahawk dataTable の「value」属性に接続できます。

http://myfaces.apache.org/tomahawk-project/tomahawk/tagdoc/t_dataTable.html

次に、Tomahawk dataScroller を使用して、そのプロパティに格納されているアイテムのリストをページ分割できます。そのコンポーネントのリファレンスは次のとおりです。dataTable コンポーネントとうまく連携します。

http://myfaces.apache.org/tomahawk-project/tomahawk/tagdoc/t_dataScroller.html

これは、dataTable のヘッダー/フッター ファセット内に含めることも、別のコンポーネントとして含めることもできます (dataScroller の「for」属性で dataTable の ID を指定する必要があります)。

各行の並べ替えや詳細の切り替えなど、dataTable を使用して実行できるその他の優れた機能がありますが、基本的なページネーションが機能するようになると、それを実装できます。

それが役立つことを願っています!

于 2008-09-18T19:25:22.777 に答える