基于displaytag大批量数据分页

本文介绍如何利用 DisplayTag 1.1 的分次加载功能进行高效分页,通过实现 PaginatedList 接口自定义分页逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

最近因为项目需要,所以想把原来使用的displaytag1.0升级为displaytag1.1,其实升级的原因很简单,1.0实在是太傻了,每次分页还需要将所有数据一次载入,效率低到无法忍受:)

1.1版最大的改进可以说是终于支持了大家期待以久的分次加载功能了,想显示多少数据就载入多少数据.1.1版本支持两种方式的分页,第一种是实现其org.displaytag.pagination.PaginatedList 接口,第二种是在页面和后台同时做修改来实现分页功能.在网上关于第二种分页的使用方法介绍的非常多,而且官方文档上面写的也比较详细,所以在这里我主要介绍自己是如何使用第一种方式进行分页的,且这种方式也是官方推荐分页方式(自己摸索的,呵呵,不好不要见怪)

首先写一个此接口的实现类

/**  * PaginatedListImpl  * User: shrek_xu  * Date: 2006-5-30  * Time: 20:35:18  *  * totalNum 所有条目数目  * currentPage 当前所在页号  * objectsPerPage 每页显示条数  * list 此页所需要显示的数据  */ public class PaginatedListHelper implements PaginatedList{     private List list;     private int pageNumber = 1;     private int objectsPerPage = 20;     private int fullListSize = 0;     private String sortCriterion;     private SortOrderEnum sortDirection;     private String searchId;

    public List getList() {         return list;     }

    public void setList(List list) {         this.list = list;     }

    public int getPageNumber() {         return pageNumber;     }

    public void setPageNumber(int pageNumber) {         this.pageNumber = pageNumber;     }

    public int getObjectsPerPage() {         return objectsPerPage;     }

    public void setObjectsPerPage(int objectsPerPage) {         this.objectsPerPage = objectsPerPage;     }

    public int getFullListSize() {         return fullListSize;     }

    public void setFullListSize(int fullListSize) {         this.fullListSize = fullListSize;     }

    public String getSortCriterion() {         return sortCriterion;     }

    public void setSortCriterion(String sortCriterion) {         this.sortCriterion = sortCriterion;     }

    public SortOrderEnum getSortDirection() {         return sortDirection;     }

    public void setSortDirection(SortOrderEnum sortDirection) {         this.sortDirection = sortDirection;     }

    public String getSearchId() {         return searchId;     }

    public void setSearchId(String searchId) {         this.searchId = searchId;     }

}

然后在使用的时候只需要创建此类的一个实例,且将所需要的参数通过set方法赋值进去就可以了

 int page;

/*  *其中request中的page参数为displaytag中的默认当前页数,当然也可以使用*TableTagParameters.SORT_AMOUNT_PAGE来表示当前页数  */  if(request.getParameter("page")!=null && !"".equals(request.getParameter("page"))){          page=Integer.parseInt(request.getParameter("page"));   }else{          page=1;   } PaginatedList paginaredList=new PaginatedListHelper();

 paginaredList.setPageNumber(page);

// 此页要显示的list数据

List list=.......;

paginaredList.setList(list);

// 总共有多少数据,他会根据所有数目和每页数目自动统计页数

paginaredList.setFullListSize(...);

// 如果你只设定这几个参数,那么其余的参数将会默认为你实现类中所赋的初值

最后,你还需要将这个实例放入到request或session中去,好让displaytag知道这个是外部分页

request.setAttribute("pageList",paginaredList);

在前台只需象下面这样写就可以了

<display:table name="${pageList}" id="list" requestURI="">

     <display:column property="id"/>

</display:table>

最开始我对每次都要传入总共有多少条数据表示疑问,认为这个没有必要,只需要第一次传入就可以了,但是后来仔细想想,因为整个分页过程是动态的,所以,很有可能在你翻页的同时,原来的数据已经发生了变化,所以每次传入总数目是很有必要的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值