分页的util类:   
  
package com.sy.util;   
  
import java.util.List;   
@SuppressWarnings("unchecked")   
public class PageBean {   
  
    private int pageSize;   
    private int totalPage;   
    private int rowCount;   
    private int currentPage;   
    private int prePage;   
    private int nextPage;   
    private boolean hasNextPage;   
    private boolean hasPreviousPage;   
    private List list;   
  
    public PageBean() {   
        this.pageSize=10;   
    }   
  
    public int getPageSize() {   
        return pageSize;   
    }   
  
    public void setPageSize(int pageSize) {   
        this.pageSize = pageSize;   
    }   
  
    public int getTotalPage() {   
        return totalPage;   
    }   
  
    public void setTotalPage(int totalPage) {   
        this.totalPage = totalPage;   
    }   
  
    public int getRowCount() {   
        return rowCount;   
    }   
  
    public void setRowCount(int rowCount) {   
        this.rowCount = rowCount;   
    }   
  
    public int getCurrentPage() {   
        return currentPage;   
    }   
  
    public void setCurrentPage(int currentPage) {   
        this.currentPage = currentPage;   
    }   
  
    public int getPrePage() {   
        return prePage;   
    }   
  
    public void setPrePage(int prePage) {   
        this.prePage = prePage;   
    }   
  
    public int getNextPage() {   
        return nextPage;   
    }   
  
    public void setNextPage(int nextPage) {   
        this.nextPage = nextPage;   
    }   
  
    public boolean isHasNextPage() {   
        return hasNextPage;   
    }   
  
    public void setHasNextPage(boolean hasNextPage) {   
        this.hasNextPage = hasNextPage;   
    }   
  
    public boolean isHasPreviousPage() {   
        return hasPreviousPage;   
    }   
  
    public void setHasPreviousPage(boolean hasPreviousPage) {   
        this.hasPreviousPage = hasPreviousPage;   
    }   
  
    public List getList() {   
        return list;   
    }   
  
    public void setList(List list) {   
        this.list = list;   
    }   
      
  
}   
  
分页的数据库操作和逻辑判断我把他单独用一个PageDaoImpl来实现:
   public class PageDaoImpl extends HibernateDaoSupport {   
  
    private String hql;   
    public PageBean page;   
    public int start;   
  
    public void init(int start){
       page = new PageBean();   
      this.hql = "from ProAddTask";  
       this.start = start;   
       setRowCount();   
       setTotalPage();   
       setCurrentPage();   
       setPrePage();   
       setNextPage();   
       setPreOrNextBoolean();   
    }   
  
    public int getRowCount(){   
      return this.getHibernateTemplate().find("select p from ProAddTask p").size();
    }   
  
    public PageBean getPage(){   
       List list = (List)getHibernateTemplate().execute(new HibernateCallback(){   
        public Object doInHibernate(Session session) throws HibernateException, SQLException {   
         Query query = session.createQuery(hql);   
         query.setFirstResult(getStartIndex());   
         query.setMaxResults(page.getPageSize());   
         return query.list();   
        }     
       });   
       page.setList(list);   
       return page;   
    }   
      
    public void setPreOrNextBoolean() {   
        if (page.getCurrentPage() <= 1) {   
            page.setHasPreviousPage(false);   
        } else {   
            page.setHasPreviousPage(true);   
        }   
        if (page.getCurrentPage() >= page.getTotalPage()) {   
            page.setHasNextPage(false);   
        } else {   
            page.setHasNextPage(true);   
        }   
    }   
  
    public void setCurrentPage() {   
        if (start < 1) {   
            page.setCurrentPage(1);   
        }   
        if (start > page.getTotalPage()) {   
            page.setCurrentPage(page.getTotalPage());   
        }   
        page.setCurrentPage(start);   
    }   
  
    public void setPrePage() {   
        page.setPrePage(page.getCurrentPage() - 1);   
    }   
  
    public void setNextPage() {   
        page.setNextPage(page.getCurrentPage() + 1);   
    }   
  
    public void setTotalPage() {   
        int rowCount = getRowCount();   
        int pageSize = page.getPageSize();   
        if (rowCount > pageSize) {   
            if (rowCount % pageSize == 0) {   
                page.setTotalPage(rowCount / pageSize);   
            } else {   
                page.setTotalPage(1 + (rowCount / pageSize));   
            }   
        } else {   
            page.setTotalPage(1);   
        }   
    }   
  
    public void setRowCount() {   
        page.setRowCount(getRowCount());   
    }   
  
    public int getStartIndex() {   
        int startIndex = 0;   
        if (start < 0) {   
            startIndex = 0;   
        } else {   
            if (start > page.getTotalPage()) {   
                startIndex = page.getPageSize() * (page.getTotalPage() - 1);   
            } else {   
                startIndex = page.getPageSize() * (start - 1);   
            }   
        }   
        return startIndex;   
    }   
}   
  
  
  
然后是业务层接口,举例AdminService.java   
  
//管理员service层接口   
public interface AdminService extends BaseService{   
//分页初始化   
    public void init(int pno);   
//分页实现   
    public Page getPage();   
}   
  
实现类AdminServiceImpl.java   //管理员service层实现类   
public class AdminServiceImpl extends BaseServiceImpl implements AdminService {   
  
    public Page getPage() {   
        return Pdao.getPage();   
    }   
    public void init(int pno) {   
        Pdao.init(pno);   
    }   
}   
  
  
struts的action层AdminAction.java   
  
  
  
//管理员action实现类     
public class AdminAction extends BaseAction {   
  private QueryTaskService queryTaskService;public QueryTaskService getQueryTaskService() {
return queryTaskService;
} public void setQueryTaskService(QueryTaskService queryTaskService) {
this.queryTaskService = queryTaskService;
}
   
//查看管理员   
    public ActionForward listAdmins(ActionMapping mapping, ActionForm form,   
            HttpServletRequest request, HttpServletResponse response) {   
            
           System.out.println(request.getParameter("pno"));
           int pno = (new Integer(request.getParameter("pno"))).intValue();   
           queryTaskService.init(pno);   
           Page myPage = queryTaskService.getPage();   
           List myList = queryTaskService.getPage().getList();   
           request.setAttribute("myPage", myPage);   
           request.setAttribute("AdminList", myList);   
           return mapping.findForward("show");   
             
    }   
}   
  
  
结构清晰,也很实用。   
  
页面lookAdmin.jsp   
  
  
  
<%@ page language="java" pageEncoding="UTF-8"%>   
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>   
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>   
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>   
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>   
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>   
<html>   
    <head>   
        <meta http-equiv="Content-Language" content="zh-cn">   
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">   
        <title></title>   
    </head>   
    <body>      
    <table align="center" width="500">   
    <tr>   
       <td align="center" colspan="10">   
          <logic:present name="myPage">   
            <html:link page="/AdminPage.do?pno=1">首页</html:link>   
          <logic:equal name="myPage" property="hasPreviousPage" value="false">上一页</logic:equal>   
          <logic:equal name="myPage" property="hasPreviousPage" value="true">   
           <a href="./AdminPage.do?pno=<bean:write name="myPage" property="prePage"/>">上一页</a>   
      </logic:equal>   
             
           每页<bean:write name="myPage" property="pageSize"/>条记录   
           共<bean:write name="myPage" property="rowCount"/>条记录   
                当前第(<bean:write name="myPage" property="currentPage"/>/<bean:write name="myPage" property="totalPage"/>)页   
        <logic:equal name="myPage" property="hasNextPage" value="false">下一页</logic:equal>   
        <logic:equal name="myPage" property="hasNextPage" value="true">   
         <a href="./AdminPage.do?pno=<bean:write name="myPage" property="nextPage"/>">下一页</a>   
        </logic:equal>   
           <a href="./AdminPage.do?pno=<bean:write name='myPage' property='totalPage'/>">末页</a>   
        </logic:present>   
      </td>   
      </tr>   
    </table>      
    </body>   
</html>  System.out.println(request.getParameter("pno"));
打印出来是null
~~ 

解决方案 »

  1.   

    lz把这个request.getParameter("pno")改成request.getParameter("myPage")
      

  2.   

    把页数打印出来看看就知道了,是否为合法number
      

  3.   

    分页时参数是String,要强转Int!
      

  4.   

    你传递的index肯定有问题的 debug一下 具体看看
      

  5.   

    晕~问题解决了~~
    pno=new Integer(request.getParameter("pno")).intValue();
    要给个if判断是否为null~·if (request.getParameter("pno")==null) {
                 pno=1;
             } else {
              pno=new Integer(request.getParameter("pno")).intValue();
             }