java - GXT - RequestFactory 与 Paging Grid 集成

标签 java gwt gxt requestfactory

我很难理解应该如何编写我的 Service 类,以便使用 RequestFactory 实现 GXT 分页

我按照 Demo site 中提供的示例进行操作,以及javadoc example Sencha 网站上给出了,但未能完全理解两者。

首先让我们假设我的服务正在返回 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从服务本身?如果是的话怎么办?

感谢您花时间关注此话题!

最佳答案

您还需要一对扩展 PagingLoadResultBean/PagingLoadResult 的 dto 代理。

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

关于java - GXT - RequestFactory 与 Paging Grid 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19925582/

相关文章:

java - 添加/删除元素的设计模式

java - 处理仅对层次结构的一部分有意义的二元运算

java - 无法将 JavaScript 和 CSS 文件从资源加载到 WebView 中的 html 中

gwt - 如何使 CSS "~"选择器在 GWT Css 资源中工作

java - 主题海王星不适用

java - 在Java中使用wkhtmltopdf将pdf编码为utf-8

java - Spring MVC 方法中字符串的 Hibernate validator

java - GWT 中scheduleDeferred 的用法?

java - GWT/GAE(Java) : when combined with GAE, app.yaml/web.xml 用户身份验证和登录/注销实际上不起作用

java - 如何创建 GWT 中检查的对象列表?