GXT - RequestFactory与Paging Grid集成

时间:2013-11-12 09:37:30

标签: java gwt gxt requestfactory

我很难理解应该如何编写 服务 类来实现GXT与RequestFactory的分页

我按照Demo site中提供的示例以及Sencha网站中提供的javadoc example,但未能完全理解这两个。

首先让我们说我的服务正在返回List<Data>Data是服务器POJO),需要以分页方式加载。

这是我的Service类暴露了一个分页方法

class BackendService {

   public List<Data> getData(int pageNumber, int pageSize) {
        int f = pageNumber * pageSize;
        int l = f + pageSize;
        if(f > 0 && l < datas.size()) {
            return  datas.subList(f, l);
        }
        return null;
   }
}

RequestFactory看起来像这样

    @Service(value=BackendService.class, locator=BackendServiceLocator.class)
    interface BackendRequestContext extends RequestContext {

       Request<List<DataProxy>> getData(int pageNumber, int pageSize);

    }

    BackendRequestContext context();
}

分页Grid期待DataProxy实现如下

DataProxy<PagingLoadConfig, PagingLoadResult<com.emc.test.client.model.DataProxy>> proxy = new RequestFactoryProxy<PagingLoadConfig, PagingLoadResult<com.emc.test.client.model.DataProxy>>() {

            @Override
            public void load(PagingLoadConfig loadConfig, Receiver<? super PagingLoadResult<com.emc.test.client.model.DataProxy>> receiver) {
                int pageNum = loadConfig.getOffset();
                int pageSize = loadConfig.getLimit();
                Request<List<com.emc.test.client.model.DataProxy>> request = backendRequestFactory.context().getData(pageNum, pageSize);
                request.fire(receiver);
            }

};

在上面的load方法中,这一行给出了编译错误

request.fire(receiver);

因为Receiver预计是

Receiver<? super PagingLoadResult<com.emc.test.client.model.DataProxy>>

任何人都可以帮助我

  • 我应该如何实现服务方法?
  • 我应该从服务本身返回PagingLoadResult而不是List吗?如果是的话怎么样?

感谢你在这个帖子上的时间!

1 个答案:

答案 0 :(得分:1)

您还需要一个扩展PagingLoadResultBean / PagingLoadResult的dto-proxy对。

1)在后端部分,您创建了以下dto:

public class YourCustomPagingLoadResultBean extends PagingLoadResultBean<Data> {

  protected YourCustomPagingLoadResultBean () {
  }

  public YourCustomPagingLoadResultBean (List<Data> list, int totalLength, int offset) {
    super(list, totalLength, offset);
  }
}

2)为此dto创建代理:

@ProxyFor(YourCustomPagingLoadResultBean.class)
public interface YourCustomPagingLoadResultProxy extends ValueProxy, PagingLoadResult<DataProxy> {
  @Override
  List<DataProxy> getData();
}

3)将您的服务更改为返回分页bean:

public YourCustomPagingLoadResultBean getData(int pageNumber, int pageSize) {
  ...
  return new YourCustomPagingLoadResultBean(list, totalLength, offset);
}

4)请求也改为:

Request<YourCustomPagingLoadResultProxy> getData(int pageNumber, int pageSize);

您使用的DataProxy看起来是正确的,您的分页网格将在这4个步骤之后运行。