分页功能是很常见的功能,特别是当数据量越来越大的时候,分页查询是必不可少的。
关于查询分页Java后端的开发技术有很多成熟的解决方案,例如如果使用的ORM框架是mybatis的话,有开源的分页插件可以使用,如:Mybatis-PageHelper。
在你引入Java后端的查询分页技术后如何和Dorado的控件结合就是本文要重点说明的。
在dorado的Java端提供了一个Page对象辅助前端控件进行分页处理。
public class Page<T> { private int pageSize;//每页记录数 private int pageNo;//当前要查询数据对应的页号 private int firstEntityIndex; private int lastEntityIndex; private Collection<T> entities;//当前分页查询出来的数据 private int entityCount;//本次查询匹配的总记录数(不考虑分页) private int pageCount;
Page对象的最重要的四个属性是:
pageSize,pageNo,entities,entityCount
Dorado的数据查询是通过前端的Ajax请求触发后端的DataProvider方法的,触发该方法的时候,前端会在ajax请求中注入pageSize和pageNo信息告诉DataProvider
{ "action":"load-data", "dataProvider":"simpleCRUD#getAll", "supportsEntity":false, "resultDataType":"v:com.bstek.dorado.sample.data.SimpleCRUD$[ProductType]", "pageSize":10, "pageNo":2 }
而在分页查询情况下Dorado的引擎通过智能方法适配的时候,会将pageSize和pageNo信息自动封装为Page对象,并作为DataProvider方法的参数传入:
@DataProvider public void getAll(Page<Product> page) { int pageNo = page.getPageNo();//获取客户端传上来的pageNo信息 int pageSize = page.getPageSize();//获取客户端传上来的pageSize信息 }
在这个方法中,我们就可以通过page参数获取客户端传上来的pageNo和pageSize信息。进而调用自己的业务逻辑层或dao层进行数据查询。
当然查询的最后结果是要返回到前台的,处理的办法还是通过Page对象:
@DataProvider public void getAll(Page<Product> page) { int pageNo = page.getPageNo(); int pageSize = page.getPageSize(); PageHelper.startPage(pageNo, pageSize); ArrayList<Product> list = productDao.getProductList(); PageInfo<Product> pageInfo = new PageInfo<Product>(list); page.setEntities(list); page.setEntityCount(pageInfo.getTotal()); }