Java 使用DataGrid和AsyncDataProvider实现SimplePager

Java 使用DataGrid和AsyncDataProvider实现SimplePager,java,gwt,Java,Gwt,当数据网格提供了从服务器获取的值时,如何使用AsyncDataProvider实现SimplePage。您必须创建一个扩展AsyncDataProvider的类。在该类中,可以重写onRangeChanged-方法 例如,我的类如下所示: public class AsyncListProviderVisit extends AsyncDataProvider<MyObject> { @Override protected void onRangeChanged(H

当数据网格提供了从服务器获取的值时,如何使用AsyncDataProvider实现SimplePage。

您必须创建一个扩展
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);
                }
            }
        });
    }
}
// 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);
公共类AsyncListProviderVisite扩展了AsyncDataProvider{
@凌驾
受保护的无效onRangeChanged(HasData显示){
//获取新范围。
最终范围=display.getVisibleRange();
/*
*异步查询数据。如果您使用的是数据库,则可以
*在这里进行RPC调用。我们将使用计时器模拟延迟。
*/
final int start=range.getStart();
int length=range.getLength();
Service.Util.getInstance().GetPartOfInMobjects(开始、长度、新AsyncCallback()){
@凌驾
失败时的公共无效(可丢弃){
确认面板cp=新的确认面板();
cp.confirm(“Error!”,“数据加载过程中出错。”);
}
@凌驾
成功时公开作废(列表结果){
如果(结果!=null){
updateRowData(开始、结果);
}
}
});
}
}
然后需要创建DataGrid、AsyncProvider和寻呼机,如下所示:

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);
                }
            }
        });
    }
}
// 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);
//创建一个单元格列表。
DataGrid=新DataGrid();
//创建一个数据提供者。
AsyncListProviderVisite数据提供程序=新建AsyncListProviderVisite();
//将单元格列表添加到数据提供程序。
dataProvider.addDataDisplay(网格);
//创建分页控件。
SimplePager pager=新SimplePager();
寻呼机设置显示(网格);
//然后把它们添加到你的面板,容器,等等
容器。添加(网格);
容器。添加(寻呼机);
编辑


正如Andre在他的评论中指出的,您还需要获取查询的正确行数。我用一个“假对象”完成了这项工作,我将它添加到我的列表中,然后在客户端将其删除。然后,您可以调用
updateRowCount(rowCount,isExact)
其中
isExact
是一个
boolean
,指示您输入的行数是精确的还是刚刚估计的。

别忘了从服务器获取当前查询的行数:-)true,忘了在答案中包含这一点,我们将尽快对此发表评论