一直都有人问Structs下分页怎么做,本人积累了一些经验,以下是我的实现。 我的实现相对还是比较灵活的,如果大家有什么更好的想法欢迎赐教。
  ps: 里面有些类和方法没有写出来,如 CollectionUtil.copy(),其实就是集合的复制,一看就明白了,可以自己实现。
  
  
1.IFormPages接口,每个需要分页的form都继承这个接口: package com.fellow.pub.servlet; 
public interface IFormPages {   int getCurrentPage();   void setCurrentPage(int currentPage);   int getItemPerPage();   void setItemPerPage(int itemPerPage); }
  
  
  
2.分页计算类Pages: package com.fellow.pub.util; 
import java.util.Vector; import java.util.Collection; import com.fellow.pub.servlet.IFormPages; 
public class Pages {   protected int itemCount;   protected int itemPerPage;   protected int currentPage; 
  public Pages() {     this.itemCount = 0;     this.itemPerPage = 0;     this.currentPage = 1;   } 
  public Pages(int itemCount, int itemPerPage) throws Exception{     this(itemCount, itemPerPage, 1);   } 
  public Pages(int itemCount, int itemPerPage, int currentPage) throws Exception{     this.itemCount = (itemCount <= 0)?0:itemCount;     this.itemPerPage = (itemPerPage <= 0)?20:itemPerPage;     int curPage = (currentPage <= 0)?1:currentPage; 
    int pageCount = (itemCount % itemPerPage == 0)?(itemCount / itemPerPage):(itemCount / itemPerPage + 1);     if(curPage > pageCount)curPage = pageCount;     this.currentPage = curPage;   } 
  public Pages(Collection collection, IFormPages formPages) throws Exception{     this(collection.size(), formPages.getItemPerPage(), formPages.getCurrentPage());   } 
  public int getItemCount() {     return this.itemCount;   } 
  public void setItemCount(int itemCount) {     this.itemCount = itemCount;   } 
  public int getItemPerPage() {     return this.itemPerPage;   } 
  public void setItemPerPage(int itemPerPage) {     this.itemPerPage = itemPerPage;   } 
  public int getCurrentPage() {     return this.currentPage;   } 
  public void setCurrentPage(int currentPage) {     this.currentPage = currentPage;   } 
  public int getPrePage(){     return this.currentPage - 1;   } 
  public int getNextPage(){     return this.currentPage + 1;   } 
  protected void AssertErrors() throws Exception{     if(itemPerPage <= 0 ||        currentPage <= 0 ||        itemCount < itemPerPage * (currentPage - 1)){       throw new Exception("Pages object calculated error");     }   } 
  public int getPageCount() throws Exception{     if(itemCount <= 0) return 0;     AssertErrors();     if(itemCount % itemPerPage == 0){       return itemCount / itemPerPage;     }     else{       return itemCount / itemPerPage + 1;     }   } 
  public int getPageItemCount() throws Exception{     if(itemCount <= 0) return 0;     int pageCount = getPageCount(); 
    if(pageCount == currentPage){       return itemCount -itemPerPage * (currentPage - 1);     }     else{       return itemPerPage;     }   } 
  public int getPageItemCount(int currentPage) throws Exception{     if(itemCount <= 0) return 0;     int pageCount = getPageCount(); 
    if(pageCount == currentPage){       return itemCount -itemPerPage * (currentPage - 1);     }     else{       return itemPerPage;     }   } 
  public boolean isFirstPage() throws Exception{     return (currentPage == 1);   } 
  public boolean isLastPage() throws Exception{     int pageCount = getPageCount();     return (pageCount == currentPage);   } 
  public Collection getIndexList() throws Exception{     int pageCount = getPageCount();     Vector result = new Vector(pageCount);     for(int i = 0; i < pageCount; i++){       result.add(new Integer(i + 1));     }     return result;   } }
  
  
  
3.分页集合类CollectionPages,继承Pages: package com.fellow.pub.util; 
import java.util.*; 
import com.fellow.pub.servlet.IFormPages; 
public class CollectionPages extends Pages {   protected Collection collection = null;   protected Collection collectionPage = null;   public CollectionPages(Collection collection,                          IFormPages formPages) throws Exception {     super(collection, formPages);     this.collection = collection;     buildCollectionPage();   } 
  public Collection getCollection(){     return this.collection;   } 
  public void setCollection(Collection collection){     this.collection = collection;   } 
  public Collection getCollectionPage(){     return this.collectionPage;   } 
  public Collection buildCollectionPage() throws Exception{     if(collection == null){       throw new Exception("collection object is null");     } 
    collectionPage = new Vector(itemPerPage);     CollectionUtil.copy(collection, collectionPage,                         (currentPage - 1) * itemPerPage,                         (currentPage) * itemPerPage);     return collectionPage;   } }
  
  
4.Action里面初始化: CollectionPages collectionPages = new CollectionPages(collection, formPages); 其中collection就是需要分页的集合 
  
5.保存到request setAttribute(name, collectionPages); 
  
6.在页面上使用collectionPages对象,collectionPages对象有两个子对象:   i.collectionPage,就是分页以后的集合        <bean:define id="collectionList" name="collectionPages" property="collectionPage" scope="request" />    ii.indexList就是页码(由于我不知道怎么用简单的方法处理页码,就只好弄这样一个对象来iterate了)        <bean:define id="indexList" name="collectionPages" property="indexList" scope="request"/>
 
 
   
 
  |