1

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

我按照Demo 站点中提供的示例,以及 Sencha 网站中给出的javadoc 示例,但未能完全理解两者。

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

这是我的服务类,它公开了一个分页方法

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从服务本身返回吗?如果是怎么办?

感谢您在此线程上的时间!

4

1 回答 1

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 个步骤之后工作。

于 2013-11-26T14:42:35.680 回答