Ecside数据库分页总记录数问题
|
ttitfly
2008-04-09
//总行数
int totalRows = 0 ;
totalRows = RequestUtil.getTotalRowsFromRequest(request) ;
//问题出现在这里:在进行过滤的时候。从 request中获得的totalRows是过滤前的总记录数。而不是过滤后的总记录数。所以过滤后的总记录数还是原来的,没有变化。有什么解决办法吗?
if (totalRows < 0) {
totalRows = bookManager.count(getEntityTrueName());
}
//每页显示多少条记录
int pageSize = DEFAULT_PAGE_SIZE ;
String ecRd = (String)request.getParameter("ec_rd");
if(StringUtils.isNotBlank(ecRd)){
pageSize = Integer.parseInt(ecRd);
}
// 页面上tableId 值
String tableId = "ec" ;
tableId = RequestUtil.getTableId(request) ;
Limit limit = RequestUtil.getLimit(request,tableId,totalRows,pageSize);
//排序信息
Sort sort=limit.getSort();
String sortKey = sort.getProperty();
String sortValue= sort.getSortOrder();
//过滤信息
FilterSet filterSet =limit.getFilterSet();
Filter[] filters = filterSet.getFilters();
limit.setRowAttributes(totalRows, DEFAULT_PAGE_SIZE);
// 取得当前要查询的页面的记录起止行号
int offset=0;
int[] rowStartEnd =new int[] { limit.getRowStart() + offset, limit.getRowEnd() + offset };
//主键
String pk = (String)request.getParameter("pk");
if(StringUtils.isBlank(pk)){
pk = "id";
}
if(StringUtils.isBlank(sortKey)){
sortKey = pk;
sortValue = "desc";
}
List list = bookManager.pageQueryByEcside(rowStartEnd[0], rowStartEnd[1],sortKey,sortValue,filters);
request.setAttribute("books",list );
这样是可以实现数据库分页的,但是会有一个问题:就是在进行过滤的时候。从 request中获得的totalRows是过滤前的总记录数。而不是过滤后的总记录数。所以过滤后的总记录数还是原来的,没有变化。有什么解决办法吗?多谢 |
|
|
ttitfly
2008-04-09
找到一种方法:
在Filter[] filters = filterSet.getFilters(); 下面加上如下代码
if(filters.length > 0){
totalRows = bookManager.getTotalRowsByCriteria(filters);
limit = RequestUtil.getLimit(request,tableId,totalRows,pageSize);
}else{
totalRows = bookManager.count(getEntityTrueName());
limit = RequestUtil.getLimit(request,tableId,totalRows,pageSize);
}
但是有个缺点就是,每次查询都要count一下记录。有没有更好的解决办法呢?多谢 |

