我很难理解应该如何编写 服务 类来实现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
吗?如果是的话怎么样?感谢你在这个帖子上的时间!
答案 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个步骤之后运行。