2012-03-16 32 views
2
我々は、ソーティングページ区切りでデータテーブルコンポーネントPrimefacesを使用している

とデータテーブルと検索結果を表示するためにLazyDataModel。検索ページのバッキングBeanはViewScopedです。ユーザーが詳細を表示するために、結果項目を選択することができ、検索結果リストからJSFページング及びソートやブラウザバック

。これは新しいページリクエストとして実装されます。 <h:link value="Show Details" outcome="showDetails?id=11234"/>。ブラウザの戻るボタンをクリックすると、ユーザーは検索結果リストに戻ります。

問題は、それは文句を言わない最後に選択ソート順とページを表示するので、データテーブルは、再び初期状態になるということです。これは、ほとんどのブラウザでは、Firefox 11だけがそれらのDOM変更をキャッシュに保持しているようです。 IEもChromeでもありません。

は誰がこれをどのように扱うか良い方法を持っていますか?実際には、「ajaxified」ソートやページングは​​必要ありません。 ViewParamsを使ってすべてを処理する方が好きですが、これはプライムフェイスではサポートされていないようです。

答えて

1

私もこのに走った、と私は役立つかもしれないコーディングパターンを開発しました。実際にPrimeFacesのものではありません(JSF 2でブックマーク可能なリンクを使用する技術の詳細)。

マークアップでは、次のようにページのすべてのパラメータを含めます:

 <f:metadata> 
      <f:viewParam name="orderID" value="#{bean.orderID}" /> 
      <f:viewParam name="sortMode" value="#{bean.sortMode}" /> 
      <f:viewParam name="firstRecord" value="#{bean.firstRecord}" /> 
      <f:viewParam name="pageSize" value="#{bean.pageSize}" /> 
     </f:metadata> 

は、これらの値の各々は、それらが設定されていない場合、それらは適切なデフォルト値を生成する、ようにバッキングBeanにバックアップされています。たとえば、次のようにこのビューへ

public int getPageSize() { 
    if (pageSize < MIN_PAGE_SIZE) pageSize = DEF_PAGE_SIZE; 
    if (pageSize > MAX_PAGE_SIZE) pageSize = DEF_PAGE_SIZE; 
    return pageSize; 
} 

リンクを生成することができる。

今、あなたはそれらの値を変更するにはユーザーコントロールを実装し、テーブルに彼らが変更されるたびに再生成します。あなたはまだそのためにAJAXを使用する必要があります - 例えば:setterメソッドで

<p:spinner value=#{bean.pageSize} > 
    <p:ajax update="tableID" /> 
</p:spinner> 

、あなたがテーブルの再生成をトリガする必要がありますが、それはそれの要点です。私はこれが役立つことを願っています

UPDATE:など

改ページを処理するために、あなたは、単に、最初のページのリンクを追加する前のページを必要とする、次のページ、リンクは次のようになります。

<h:link value="First Page" outcome="thisPage"> 
     <f:param name="orderID" value="#{bean.orderID}" /> 
     <f:param name="sortMode" value="#{bean.sortMode}" /> 
     <f:param name="firstRecord" value="0" /> 
     <f:param name="pageSize" value="#{bean.pageSize}" /> 
</h:link> 
<h:link value="Next Page" outcome="thisPage"> 
     <f:param name="orderID" value="#{bean.orderID}" /> 
     <f:param name="sortMode" value="#{bean.sortMode}" /> 
     <f:param name="firstRecord" value="#{bean.nextRecord}" /> 
     <f:param name="pageSize" value="#{bean.pageSize}" /> 
</h:link> 

などをあなたバッキングBeanにプロパティを実装して、パラメータが何であるべきかを計算する必要があります。

+0

THXは、はいビューのparamsとしてページや並べ替えのパラメータを持つことは、私は、AJAXの上に好むものです。しかし、私の質問は、プライムフェースでのレイズ荷重データを使って、このアプローチでページネーションとソートを処理する方法です。 – fischermatte

+0

@fischermatte更新を参照してください。 – AlanObject

+0

まだ - ajaxリクエストを実行すべきではなく、これらのパラメータを使用して新しいページリクエストを呼び出すべきであるという、プライムフェイスのdatagetableのページネイタとソートボタンをどのように伝えますか?私がそこに見る唯一の解決策は、そのような並べ替えとページ設定を使用して独自のdatatableコンポーネントを作成することです。しかし、私がこの問題を抱えている最初の人であれば、本当に不思議です。私の視点から見ると、これはコンポーネントフレームワークによって処理されるべき機能です。 – fischermatte

関連する問題