先看看效果吧!
 

下面是关键代码:


  
  1. package com.hqh.page.util;  
  2.  
  3. import java.util.List;  
  4.  
  5. public class PageForm {  
  6. private int currentPage = 1;// 当前页  
  7. private int prePage = 0;// 上一页  
  8. private int nextPage = 0;// 下一页  
  9. private int pageSize = 10;// 每页显示的行数  
  10. private int totalPage = 0;// 总页数  
  11. private int totalSize = 0;// 总纪录数  
  12. private List list;  
  13.  
  14. public PageForm() {  
  15.  
  16. }  
  17.  
  18. /**  
  19. *   
  20. * @param currentPage  
  21. * 当前页  
  22. * @param pageSize  
  23. * 每页显示的行数  
  24. */  
  25. public PageForm(int currentPage, int pageSize) {  
  26. this.currentPage = currentPage;  
  27. this.pageSize = pageSize;  
  28. }  
  29.  
  30. public int getCurrentPage() {  
  31. return currentPage;  
  32. }  
  33.  
  34. public void setCurrentPage(int currentPage) {  
  35. if (currentPage < 1) {  
  36. this.currentPage = 1;  
  37. else {  
  38. this.currentPage = currentPage;  
  39. }  
  40. }  
  41.  
  42. // 上一页  
  43. public int getPrePage() {  
  44. if (currentPage > 1) {  
  45. prePage = currentPage - 1;  
  46. else {  
  47. prePage = 0;  
  48. }  
  49. return prePage;  
  50. }  
  51.  
  52. // 下一页  
  53. public int getNextPage() {  
  54. if (currentPage < totalPage) {  
  55. nextPage = currentPage + 1;  
  56. else {  
  57. nextPage = totalPage;  
  58. }  
  59. return nextPage;  
  60. }  
  61.  
  62. public int getPageSize() {  
  63. if (this.pageSize <= 0) {  
  64. this.pageSize = 10;  
  65. }  
  66. return pageSize;  
  67. }  
  68.  
  69. public void setPageSize(int pageSize) {  
  70. this.pageSize = pageSize;  
  71. }  
  72.  
  73. public int getTotalPage() {  
  74. if (getTotalSize() % pageSize == 0) {// 100%10->totalPage=10  
  75. this.totalPage = getTotalSize() / pageSize;  
  76. else {  
  77. this.totalPage = getTotalSize() / pageSize + 1;  
  78. }  
  79. return this.totalPage;  
  80. }  
  81.  
  82. public int getTotalSize() {  
  83. return this.list.size();  
  84. }  
  85.  
  86. public List getList() {  
  87. return list;  
  88. }  
  89.  
  90. public void setList(List list) {  
  91. this.list = list;  
  92. }  

可重复利用的page.jsp


  
  1. <%@ page language="java" pageEncoding="GB18030"%>  
  2.  
  3. <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>  
  4. <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>  
  5. <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>  
  6. <%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>  
  7.  
  8. <bean:define id="pageForm" name="pageForm" type="com.hqh.page.util.PageForm"></bean:define>  
  9. <bean:define id="actionPath" name="actionPath"></bean:define>  
  10.  
  11. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  12. <html:html lang="true">  
  13. <head>  
  14. <html:base />  
  15. <title></title>  
  16. </head>  
  17.  
  18. <body>  
  19. <table>  
  20. <tr>  
  21. <td>共<bean:write name="pageForm" property="totalSize"/>条信息</td>  
  22. <td>  
  23. <logic:equal name="pageForm" value="1" property="currentPage">首页</logic:equal>  
  24. <logic:notEqual name="pageForm" value="1" property="currentPage">  
  25. <a href="<%=actionPath %>?currentPage=1&pageSize=<bean:write name="pageForm" property="pageSize"/>">首页</a>  
  26. </logic:notEqual>   
  27. </td>  
  28. <td>  
  29. <logic:equal name="pageForm" property="currentPage" value="1">上一页</logic:equal>  
  30. <logic:notEqual name="pageForm" property="currentPage" value="1">  
  31. <a href="<%=actionPath %>?currentPage=<bean:write name="pageForm" property="prePage"/>&pageSize=<bean:write name="pageForm" property="pageSize"/>">上一页</a>  
  32. </logic:notEqual>  
  33. </td>  
  34. <td>  
  35. <logic:equal name="pageForm" property="currentPage" value="${pageForm.totalPage}">下一页</logic:equal>  
  36. <logic:notEqual name="pageForm" property="currentPage" value="${pageForm.totalPage}">  
  37. <a href="<%=actionPath %>?currentPage=<bean:write name="pageForm" property="nextPage"/>&pageSize=<bean:write name="pageForm" property="pageSize"/>">下一页</a>  
  38. </logic:notEqual>  
  39. </td>  
  40. <td>  
  41. <logic:equal name="pageForm" property="currentPage" value="${pageForm.totalPage}" >尾页</logic:equal>  
  42. <logic:notEqual name="pageForm" property="currentPage" value="${pageForm.totalPage}" >  
  43. <a href="<%=actionPath %>?currentPage=<bean:write name="pageForm" property="totalPage"/>&pageSize=<bean:write name="pageForm" property="pageSize"/>">尾页</a>  
  44. </logic:notEqual>  
  45. </td>  
  46. <td>  
  47. 跳转到第<select name='currentPage'   
  48. onChange='javascript:location=this.options[this.selectedIndex].value;'>  
  49.  
  50. <%  
  51. for (int i = 1; i <= pageForm.getTotalPage(); i++) {  
  52. if (i == (pageForm.getCurrentPage())) {%>  
  53. <option value="<%=actionPath %>?currentPage=<%=i%>&pageSize=<%=pageForm.getPageSize()%>+" selected><%=i %></option>  
  54. <% } else {%>  
  55. <option value="<%=actionPath %>?currentPage=<%=i%>&pageSize=<%=pageForm.getPageSize()%>"><%=i %></option>  
  56. <%}}%>  
  57. </select>页   
  58. 每页行数 <select name='pageSize' 
  59. onChange='javascript:location=this.options[this.selectedIndex].value;'>  
  60. <%  
  61. for (int i = 5; i <= 30; i=i+5) {  
  62. if (i == pageForm.getPageSize()) {%>  
  63. <option value="<%=actionPath %>?currentPage=1&pageSize=<%=i%>" selected><%=i%></option>  
  64. <%} else {%>  
  65. <option value="<%=actionPath %>?currentPage=1&pageSize=<%=i%>"><%=i%></option>  
  66. <%}}%>  
  67. </select>  
  68. </td>  
  69. <td>当前:<bean:write name="pageForm" property="currentPage"/>/<bean:write name="pageForm" property="totalPage"/>页</td>  
  70. </tr>  
  71. </table>  
  72. </body>  
  73. </html:html> 

action:


  
  1. /*  
  2. * Generated by MyEclipse Struts  
  3. * Template path: templates/java/JavaClass.vtl  
  4. */  
  5. package com.hqh.page.struts.action;  
  6.  
  7. import java.util.List;  
  8.  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11. import org.apache.struts.action.Action;  
  12. import org.apache.struts.action.ActionForm;  
  13. import org.apache.struts.action.ActionForward;  
  14. import org.apache.struts.action.ActionMapping;  
  15.  
  16. import com.hqh.page.bean.People;  
  17. import com.hqh.page.dao.PeopleDAO;  
  18. import com.hqh.page.util.PageForm;  
  19.  
  20. /**  
  21. * MyEclipse Struts Creation date: 12-24-2007  
  22. *   
  23. * XDoclet definition:  
  24. *   
  25. * @struts.action validate="true" 
  26. */  
  27. public class PeopleAction2 extends Action {  
  28. /*  
  29. * Generated Methods  
  30. */  
  31. private PeopleDAO peopleDAO = null;  
  32.  
  33. public ActionForward execute(ActionMapping mapping, ActionForm form,  
  34. HttpServletRequest request, HttpServletResponse response) {  
  35. peopleDAO = new PeopleDAO();  
  36. List<People> list = peopleDAO.getAllPeople();  
  37. PageForm pageForm = new PageForm(1, 10);  
  38. pageForm.setList(list);  
  39. String currentPage = request.getParameter("currentPage");//  
  40. if (currentPage != null) {  
  41. try {  
  42. pageForm.setCurrentPage(Integer.parseInt(currentPage));  
  43. } catch (NumberFormatException e) {  
  44. //如果从地址拦输入不合法的参数,就默认跳到第一页  
  45. pageForm.setCurrentPage(1);  
  46. }  
  47. }  
  48. String pageSize = request.getParameter("pageSize");// 一页显示几行  
  49. if (pageSize != null) {  
  50. try {  
  51. pageForm.setPageSize(Integer.parseInt(pageSize));  
  52. } catch (NumberFormatException e) {  
  53. //如果从地址拦输入不合法的参数,默认每页显示10行  
  54. pageForm.setPageSize(10);  
  55. }  
  56. }  
  57. request.setAttribute("pageForm", pageForm);//分页中要用到  
  58. request.setAttribute("actionPath""second.do");// 设置该action的请求路径,也就是该action在struts-config.xml中对应的path  
  59. return mapping.findForward("peopleList");//此处跳到pagination2.jsp  
  60. }  

测试页面(pagination2.jsp):


  
  1. <%@ page language="java" pageEncoding="GB18030"%>  
  2.  
  3. <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>  
  4. <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>  
  5. <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>  
  6. <%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>  
  7.  
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  9. <html:html lang="true">  
  10. <head>  
  11. <html:base />  
  12. <title>分页</title>  
  13. </head>  
  14. <bean:define id="pageForm" name="pageForm" 
  15. type="com.hqh.page.util.PageForm"></bean:define>  
  16. <bean:define id="actionPath" name="actionPath"></bean:define>  
  17. <body>  
  18. 下面是从数据库中取到的数据:  
  19. <table width="700" border="1" height="73">  
  20. <tbody>  
  21. <tr>  
  22. <td>  
  23. 编号  
  24. </td>  
  25. <td>  
  26. 姓名  
  27. </td>  
  28. <td>  
  29. 性别  
  30. </td>  
  31. <td>  
  32. 年龄  
  33. </td>  
  34. <td>  
  35. 职位  
  36. </td>  
  37. </tr>  
  38. <logic:iterate id="people" name="pageForm" property="list" 
  39. type="com.hqh.page.bean.People" 
  40. offset="${(pageForm.currentPage-1)*(pageForm.pageSize)}" 
  41. length="${pageForm.pageSize}">  
  42. <tr>  
  43. <td>  
  44. <bean:write name="people" property="id" />  
  45. </td>  
  46. <td>  
  47. <bean:write name="people" property="name" />  
  48. </td>  
  49. <td>  
  50. <bean:write name="people" property="sex" />  
  51. </td>  
  52. <td>  
  53. <bean:write name="people" property="age" />  
  54. </td>  
  55. <td>  
  56. <bean:write name="people" property="profession" />  
  57. </td>  
  58. </tr>  
  59. </logic:iterate>  
  60. </tbody>  
  61. </table>  
  62. <jsp:include page="page.jsp"></jsp:include>  
  63. </body>  
  64. </html:html>