2

CellTable にページングを実装しようとしていますが、現在、「1000 の 1-10」レコードではなく「10 の 1-10」レコードが表示されています。総レコード数を更新できる場所がわかりません。私の AsyncDataProvider は次のようになります。

    AsyncDataProvider<OutletSearchVO> latestProvider = new AsyncDataProvider<OutletSearchVO>() {

        @Override
        protected void onRangeChanged(HasData<OutletSearchVO> display) {
            final int start = display.getVisibleRange().getStart();
            int length = display.getVisibleRange().getLength();
            AsyncCallback<List<OutletSearchVO>> callback = new AsyncCallback<List<OutletSearchVO>>() {
                @Override
                public void onFailure(Throwable caught) {
                    Window.alert(caught.getMessage());
                }

                @Override
                public void onSuccess(List<OutletSearchVO> result) {
                    updateRowData(start, result);
                }
            };
            // The remote service that should be implemented
            service.getOutletPage(start, length, callback);

        }
    };

レコードを取得するために使用している SQL は、次のようなものです。

SELECT *
  FROM (SELECT outlet_id,
           outlet_name,
           image,
           ROWNUM rn
      FROM (  SELECT outlet_id outlet_id,
                     account_name outlet_name,
                     image_score image,
                FROM outlets)
            ORDER BY OOI.created_on DESC, OOI.account_name))
WHERE rn > ? AND rn < ?    

疑問符は、準備済みステートメントの開始範囲と終了範囲に置き換えられます。

4

1 に答える 1

3

内部から呼び出す必要updateRowCountがありますAsyncDataProvider( を呼び出す方法と同様updateRowData)。つまり、サーバーにそのカウントを要求する必要があります (または、少なくとも概算を求めてから、 の 2 番目の引数として または を渡すかどうかを選択しtrueます)。falseupdateRowCount

もちろん、updateRowCountの外側から呼び出すこともできonRangeChangeます。特に、行数が事前にわかっていて、その数がそれほど変わらない場合は特にそうです。

于 2012-04-13T16:20:57.927 に答える