客户端上的gwt cellTable缓存
我打算创建一个单元格表,显示数据库中联系人的信息。 我将要显示的表有很多行 目前,我设法轻松地显示数据。 我唯一的问题是,当我在寻呼机中更改页面时。gwt一次又一次地发送数据请求,尽管我以前已经请求过这些页面 如何进行客户端缓存 p、 以下是OnRange的一段代码:客户端上的gwt cellTable缓存,gwt,caching,gwt-celltable,Gwt,Caching,Gwt Celltable,我打算创建一个单元格表,显示数据库中联系人的信息。 我将要显示的表有很多行 目前,我设法轻松地显示数据。 我唯一的问题是,当我在寻呼机中更改页面时。gwt一次又一次地发送数据请求,尽管我以前已经请求过这些页面 如何进行客户端缓存 p、 以下是OnRange的一段代码: AsyncDataProvider<Contact> provider = new AsyncDataProvider<Contact>() { @Override protected void o
AsyncDataProvider<Contact> provider = new AsyncDataProvider<Contact>() {
@Override
protected void onRangeChanged(HasData<Contact> display) {
int start = display.getVisibleRange().getStart();
int end = start + display.getVisibleRange().getLength();
end = end >= DBHelper.size() ? DBHelper.size() : end;
List<Contact> sub = DBHelper.get(start, end);
updateRowData(start, sub);
}
};
AsyncDataProvider=新的AsyncDataProvider(){
@凌驾
受保护的无效onRangeChanged(HasData显示){
int start=display.getVisibleRange().getStart();
int end=start+display.getVisibleRange().getLength();
end=end>=DBHelper.size()?DBHelper.size():end;
List sub=DBHelper.get(开始、结束);
updateRowData(开始,子节点);
}
};
编辑:
Churro建议我创建一个helper类(比如DBHelper),它将缓存一些结果,这就是我跳过db访问的方式。这不是我想要的,我想在客户端有一个缓存,helper类仍然不会为我保存一个client->server调用 您应该实现一个类来帮助客户机上的缓存。它将充当服务接口(
DBHelper
)和CellTable
之间的一层。它将管理RPC请求,并且仅在需要刷新数据时进行RPC调用。否则,它将从一些缓存结构(如映射
)返回缓存数据
实现后,您的
AsyncDataProvider
将调用CacheImpl.get(开始,结束)
而不是DBHelper.get(start,end)
为了帮助存储,我使用了EntityWindow,它的作用是将两个范围保持在前面,并获取两个之前的范围。通过这种方式,您可以限制缓存在内存中的对象数量,并在后台获取下两个对象,以使下一页更快。加载时,您可以获取渲染视图所需的数据,并在后台获取2x或3x display.getVisibleRange().getLength()实体,以便立即加载“下一步”按钮。当用户单击“下一步”时,您可以获取未来的元素并删除以前的元素。@Urbanleg如果您只想获取一次数据,然后翻阅检索到的数据,则必须使用ListDataProvider
类,而不是AsyncDataProvider
。您仍然可以进行RPC调用,然后将结果发送到ListDataProvider
,后者将同步处理分页和排序。