3

サーバーからフェッチされた値がデータ グリッドに提供されている場合に、AsyncDataProvider を使用して SimplePager を実装する方法。

4

1 に答える 1

6

を拡張するクラスを作成する必要がありますAsyncDataProvider。そのクラスでは、メソッドをオーバーライドできますonRangeChanged

たとえば、私のクラスは次のようになります。

public class AsyncListProviderVisit extends AsyncDataProvider<MyObject> {

    @Override
    protected void onRangeChanged(HasData<MyObject> display) {
        // Get the new range.
        final Range range = display.getVisibleRange();

        /*
         * Query the data asynchronously. If you are using a database, you can
         * make an RPC call here. We'll use a Timer to simulate a delay.
         */

        final int start = range.getStart();
        int length = range.getLength();

        Service.Util.getInstance().getPartOfImmoObjects(start, length, new AsyncCallback<List<MyObject>>() {

            @Override
            public void onFailure(Throwable caught) {
                ConfirmationPanel cp = new ConfirmationPanel();
                cp.confirm("Error!", "An Error occurred during data-loading.");
            }

            @Override
            public void onSuccess(List<MyObject> result) {
                if (result != null) {
                    updateRowData(start, result);
                }
            }
        });
    }
}

次に、次のように、DataGrid、AsyncProvider、および Pager を作成する必要があります。

// Create a CellList.
DataGrid<LcVisits> grid = new DataGrid<LcVisits>();

// Create a data provider.
AsyncListProviderVisit dataProvider = new AsyncListProviderVisit();

// Add the cellList to the dataProvider.
dataProvider.addDataDisplay(grid);

// Create paging controls.
SimplePager pager = new SimplePager();
pager.setDisplay(grid);

// and add them to your panel, container, whatever
container.add(grid);
container.add(pager);

編集

アンドレがコメントで指摘したように、クエリの正しい行数を取得する必要もあります。これを「偽のオブジェクト」で行いました。これをリストに追加してから、クライアント側で削除しました。その後、入力した行数が正確な数なのか、単に推定されたのかを示すであるupdateRowCount(rowCount, isExact)whereを呼び出すことができます。isExcactboolean

于 2013-11-18T12:09:11.750 に答える