posts - 1,  comments - 0,  trackbacks - 0
  2007年4月13日

                                                  学习DispalyTag1.1分页

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

给出 org.displaytag.pagination.PaginatedList接口原代码如下


package org.displaytag.pagination;

import java.util.List;
import org.displaytag.properties.SortOrderEnum;

public interface PaginatedList
{

    
public abstract List getList();

    
public abstract int getPageNumber();

    
public abstract int getObjectsPerPage();

    
public abstract int getFullListSize();

    
public abstract String getSortCriterion();

    
public abstract SortOrderEnum getSortDirection();

    
public abstract String getSearchId();
}



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

/**
 * PaginatedListImpl
 * 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>

 

因为整个分页过程是动态的,所以,很有可能在你翻页的同时,原来的数据已经发生了变化,所以每次传入总数目是很有必要的(070412).

posted @ 2007-04-13 06:30 Jorny.R 阅读(102) | 评论 (0)编辑 收藏
<2007年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用链接

留言簿(2)

随笔档案

搜索

  •  

最新评论

風瑟瑟,燈火欄柵;