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一下记录。有没有更好的解决办法呢?多谢