我的struts实现分页处理,供参考

类别:Java 点击:0 评论:0 推荐:

一直都有人问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"/>


本文地址:http://com.8s8s.com/it/it12033.htm