我打算创建一个单元格表,显示有关DB中联系人的信息。 我即将展示的桌子有很多行。
目前我设法轻松显示数据。 我唯一的问题是,当我在寻呼机中更改页面时。 gwt一次又一次地发送数据请求,即使我之前已经请求过这些页面!
如何让客户端缓存?
p.s这是onRangeChanged的一段代码:
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);
}
};
编辑:
Churro建议我将创建一个辅助类(如DBHelper),它将缓存一些结果,这就是我将如何跳过数据库访问。这不是我的意图,我在客户端有一个缓存,帮助类仍然不会救我一个客户端 - &gt;服务器调用。
答案 0 :(得分:2)
您应该实现一个类来帮助客户端进行缓存。它将充当您的服务界面(DBHelper
)和CellTable
之间的一个层。它将管理RPC请求,并仅在需要刷新数据时进行RPC调用。否则,它将从某个缓存结构(如Map
。
实施后,AsyncDataProvider
会拨打CacheImpl.get(start, end);
而不是DBHelper.get(start, end)
。
答案 1 :(得分:1)
为了帮助内存,我使用了一个EntityWindow,它的作用是保持两个范围先前并获取前两个范围。这样,您可以限制在内存中缓存的对象数量,并在后台获取后两个对象,以使下一页更快。在加载时,您可以获取渲染视图所需的数据,并在后台运行并获取2x或3x display.getVisibleRange()。getLength()实体,以便下一个按钮立即加载。当用户单击下一步时,您可以获取将来的元素并删除以前的元素。