客户端的gwt cellTable缓存

时间:2013-10-07 15:50:08

标签: gwt caching gwt-celltable

我打算创建一个单元格表,显示有关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;服务器调用。

2 个答案:

答案 0 :(得分:2)

您应该实现一个类来帮助客户端进行缓存。它将充当您的服务界面(DBHelper)和CellTable之间的一个层。它将管理RPC请求,并仅在需要刷新数据时进行RPC调用。否则,它将从某个缓存结构(如Map

返回缓存数据

实施后,AsyncDataProvider会拨打CacheImpl.get(start, end);而不是DBHelper.get(start, end)

答案 1 :(得分:1)

为了帮助内存,我使用了一个EntityWindow,它的作用是保持两个范围先前并获取前两个范围。这样,您可以限制在内存中缓存的对象数量,并在后台获取后两个对象,以使下一页更快。在加载时,您可以获取渲染视图所需的数据,并在后台运行并获取2x或3x display.getVisibleRange()。getLength()实体,以便下一个按钮立即加载。当用户单击下一步时,您可以获取将来的元素并删除以前的元素。