1

dataTableで遅延読み込み、ページング、グローバルフィルターを使用しています

レイジーロード関数では、2つのシナリオをサポートするために2つの関数を追加します。

1)ユーザーがページングしているとき

2)ユーザーがグローバルフィルターに値を追加して「Enter」を押したとき

基本的に私が知る必要があるのは、使用する関数を決定するために実行されたアクティビティです。

データ表:

     <p:dataTable id="osTable"       
                     var="object"
                     value="#{bean.lazyModel}"
                     selection="#{bean.selectedObjectSet}"
                     selectionMode="single"
                     rowKey="#{object.ID}"
                     paginator="true"
                     paginatorPosition="bottom"
                     paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
                     rowsPerPageTemplate="5,10,15"
                     rows="10"
                     widgetVar="objectTable">
            <f:facet name="header"> 
                <p:outputPanel style="float: right"> 
                    <h:outputText value="Search all fields:" /> 
                    <p:inputText id="globalFilter" 
                                 onkeypress="if (event.keyCode == 13) {objectSetTable.filter()}"
                                 style="width:150px"/>
                </p:outputPanel> 
            </f:facet>

ロード機能:

  @Override
public List<CfgSe2deMapping> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
    List<Mapping> data = new ArrayList<Mapping>();


    if (// if user press enter ) {
        data.addAll(MappingHelper.getViaFilter(filters.get("globalFilter")));
    } else {
        data.addAll(MappingHelper.getViaOffSet(first + 1, first + pageSize));
    }

Primefaces3.2を使用しています

ありがとう

4

1 に答える 1

0

あなたはこれを間違った方法で考えています。ユーザーが何をしたかに関係なく、常に同じことを行う必要があります。データを取得し(フィルターがある場合は適用)、ページ分割します( 。pageSizeから始まる行を返します) first

フィルタがあるのに、なぜ「first」パラメータと「pageSize」パラメータを含めないのですか?行はどちらの方法でもページ付けする必要があります。そうしないと、ユーザーはフィルタリングされた結果の最初のページしか見ることができません。

また、テーブルに正しいページ数が表示されるように、getRowCountメソッドをオーバーライドする必要があります。

于 2012-08-03T14:40:24.870 に答える