我很难理解应该如何编写我的 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/