当为数据网格提供从服务器获取的值时,如何使用 AsyncDataProvider 实现 SimplePager。
最佳答案
您必须创建一个扩展 AsyncDataProvider
的类。在该类中,您可以覆盖 onRangeChanged
方法。
例如我的类(class)是这样的:
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);
编辑
正如 Andre 在他的评论中指出的那样,您还需要为查询获取正确的行数。我用一个“假对象”来做到这一点,我将其添加到我的列表中,然后在客户端将其删除。然后,您可以调用 updateRowCount(rowCount, isExact)
,其中 isExcact
是一个 boolean
,指示您输入的行计数是准确计数还是只是估计。
关于java - 使用 DataGrid 和 AsyncDataProvider 实现 SimplePager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17859782/