1

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

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

我怎样才能使客户端缓存?

ps这里是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)来缓存一些结果,这就是我将如何跳过数据库访问。那不是我想要的,我打算在客户端有一个缓存,助手类仍然不会为我节省客户端->服务器调用。

4

2 回答 2

2

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

实施后,您AsyncDataProvider将调用CacheImpl.get(start, end);而不是DBHelper.get(start, end).

于 2013-10-07T16:18:10.170 回答
1

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

于 2013-10-07T19:58:36.930 回答