首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

DisplaybTag实现内存储器分页

2014-01-13 
DisplaybTag实现内存分页本文转载于http://blog.csdn.net/blackwingzhong/article/details/3322145?Displa

DisplaybTag实现内存分页

本文转载于http://blog.csdn.net/blackwingzhong/article/details/3322145

?

Displaytag用来实现内存分页的确很方便,但是当列表数据太大,就不适宜一次过读出来内存进行分页了。Displaytag当然也支持进行数据库分页,基本上主要是实现org.displaytag.pagination.PaginatedList接口,并且通过hibernate的相应方法进行查询就行。   本项目是Struts2,Hibernate,Spring主流框架结合开发的。实现数据库分页的步骤为:  1.实现PaginatedList接口   PaginatedList的代码为:    public interface PaginatedList    {        List getList();        int getPageNumber();        int getObjectsPerPage();        int getFullListSize();        String getSortCriterion();        SortOrderEnum getSortDirection();        String getSearchId();    }   从以上代码可以知道,此接口应该有相应的成员变量,那么在实现这个接口的同时,要补充定义好相应的变量。     2.在Hibernate层实现分页查询数据库   Hibernate支持分批对数据库进行查询,这里是使用Query接口:               Session s=null;            Query query=null;                        String queryString="select o.id,o.ICityId,o.SName,o.IPublishCount,o.DRegisterDate,r.SRegionName from TbOwnerUser as o,TbRegion as r " +            " where o.ERole='owner' and o.ICityId=r.id order by o.ICityId";            try {                 s= this.getSession();                 query= s.createQuery(queryString);                               //设置起始查询的记录号                query.setFirstResult((pageNumber - 1) * pageSize);                //设置一次查询所要获得的记录数,即是每页记录数                query.setMaxResults(pageSize);                            return query.list();            } catch (Exception e) {                System.out.println("获取业主列表时出错!");                e.printStackTrace();            }finally{                try {                    s.close();                } catch (Exception e) {                    e.printStackTrace();                }            }  其中,实现分页查询的主要是:    query.setFirstResult((pageNumber - 1) * pageSize);    query.setMaxResults(pageSize);   setFirstResult是指定这次查询开始的记录数,setMaxResults是指定一次查询所要查询出的记录条数。每次查询都只会读取pageSize大小的数据出去,那么就节省了很多内存空间了。   3.在action中设置分页相关的参数       HttpServletRequest request=ServletActionContext.getRequest();    HttpSession session=request.getSession();            if(request.getParameter("page")!=null && "".equals(request.getParameter("page"))==false)                pageNumber=Integer.parseInt(request.getParameter("page"));            else                pageNumber=1;                        ListPagination list=new ListPagination();            list.setFullListSize(this.getDeletedOwnerListSize());            list.setList(backendOwnerUserManageService.getDeletedOwners(pageNumber, SessionParameters.PAGE_SIZE));            list.setObjectsPerPage(SessionParameters.PAGE_SIZE);            list.setPageNumber(pageNumber);            displaytag是用“page”这个参数来实现页数的传递的,所以request.getParameter("page")获得当前页号。ListPagination list=new ListPagination()为自己实现了PaginatedList的类,在action中要把整个列表大小、当前页数、每页记录数等信息设置给自己实现了PaginatedList的类,之后就可以直接把这个list传递给displaytag进行输出了。   4. displaytag显示   这里只需要把上面设置好的list交给display:table的name属性进行显示就可以。    <display:table name="${backendListOwnerAction.pageList}" id="ownerTable" >    </displaytag:table>  至此就简单的实现了内存分页,每次翻页都会查询一次数据库,虽然查询数据库的次数增加了,但是对于大list来说,能够节省不少内存空间。

?

热点排行