Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
客户端上的gwt cellTable缓存_Gwt_Caching_Gwt Celltable - Fatal编程技术网

客户端上的gwt cellTable缓存

客户端上的gwt cellTable缓存,gwt,caching,gwt-celltable,Gwt,Caching,Gwt Celltable,我打算创建一个单元格表,显示数据库中联系人的信息。 我将要显示的表有很多行 目前,我设法轻松地显示数据。 我唯一的问题是,当我在寻呼机中更改页面时。gwt一次又一次地发送数据请求,尽管我以前已经请求过这些页面 如何进行客户端缓存 p、 以下是OnRange的一段代码: AsyncDataProvider<Contact> provider = new AsyncDataProvider<Contact>() { @Override protected void o

我打算创建一个单元格表,显示数据库中联系人的信息。 我将要显示的表有很多行

目前,我设法轻松地显示数据。 我唯一的问题是,当我在寻呼机中更改页面时。gwt一次又一次地发送数据请求,尽管我以前已经请求过这些页面

如何进行客户端缓存

p、 以下是OnRange的一段代码:

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
,后者将同步处理分页和排序。