主要思想,将要分面的数据全部取出。放入bigList,再根据curentPage对大集合切割成分页要显示的数据smallList。
通过action请求在分面的jsp页面中输出smallList。调用分页控制pageController.jsp。
PageController.java
package articles.page; import java.util.ArrayList; //负责传入一个大的集合,根据页号返回所需要的数据 //计算总页数 =(总记录数+每页条数-1)/每页条数 //第N页显示第几条记录(记录从0开始算)? (N-1)*每页条数=<序号< N*每页条数 public class PageController { @SuppressWarnings("unchecked") private ArrayList bigList; // 大的集合,外界传入 private int curentPageIndex = 1; // 当前页号,外界传入 private int countPerpage = 5; // 每页条数,外界可以设定 @SuppressWarnings("unchecked") private ArrayList smallList; // 小的集合,返回 private int pageCount; // 页数 private int recordCount; // 记录条数 private int prePageIndex; // 上一页序号 private int nextPageIndex; // 下一页序号 private boolean firstPage; // 是否第一页 private boolean lastPage; // 是否最后一页 public void setCurentPage(String curentPage) { if (curentPage == null) { curentPage = "1"; } int currentPageIndex = Integer.parseInt(curentPage); this.setCurentPageIndex(currentPageIndex); } @SuppressWarnings("unchecked") public void setCurentPageIndex(int curentPageIndex) { // 每当页数改变,都会调用这个函数,筛选代码可以写在这里 this.curentPageIndex = curentPageIndex; // 上一页,下一页确定 prePageIndex = curentPageIndex - 1; nextPageIndex = curentPageIndex + 1; // 是否第一页,最后一页 if (curentPageIndex == 1) { firstPage = true; } else { firstPage = false; } if (curentPageIndex == pageCount || pageCount == 0) { lastPage = true; } else { lastPage = false; } // 筛选工作 smallList = new ArrayList(); for (int i = (curentPageIndex - 1) * countPerpage; i < curentPageIndex * countPerpage && i < recordCount; i++) { smallList.add(bigList.get(i)); } } @SuppressWarnings("unchecked") public void setBigList(ArrayList bigList) { this.bigList = bigList; // 计算条数 recordCount = bigList.size(); // 计算总页数 =(总记录数+每页条数-1)/每页条数 pageCount = (recordCount + countPerpage - 1) / countPerpage; } public int getCountPerpage() { return countPerpage; } @SuppressWarnings("unchecked") public ArrayList getBigList() { return bigList; } public int getCurentPageIndex() { return curentPageIndex; } public void setCountPerpage(int countPerpage) { this.countPerpage = countPerpage; } @SuppressWarnings("unchecked") public ArrayList getSmallList() { return smallList; } @SuppressWarnings("unchecked") public void setSmallList(ArrayList smallList) { this.smallList = smallList; } public int getPageCount() { return pageCount; } public void setPageCount(int pageCount) { this.pageCount = pageCount; } public int getRecordCount() { return recordCount; } public void setRecordCount(int recordCount) { this.recordCount = recordCount; } public int getPrePageIndex() { return prePageIndex; } public void setPrePageIndex(int prePageIndex) { this.prePageIndex = prePageIndex; } public int getNextPageIndex() { return nextPageIndex; } public void setNextPageIndex(int nextPageIndex) { this.nextPageIndex = nextPageIndex; } public boolean isFirstPage() { return firstPage; } public void setFirstPage(boolean firstPage) { this.firstPage = firstPage; } public boolean isLastPage() { return lastPage; } public void setLastPage(boolean lastPage) { this.lastPage = lastPage; } }
*.action
public class ArticleAction extends ActionSupport { private Article article; private ArticleFacade articleFacade; private List listOperate; private PageController pc; public ArticleAction() { articleFacade = new ArticleFacadeImpl(); } public List getListOperate() { return listOperate; } public PageController getPc() { return pc; } public void setPc(PageController pc) { this.pc = pc; } public String operateList() { operatelogFacade = new OperatelogFacadeImpl(); HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); User user1 = (User) session.getAttribute("user"); pc = (PageController) request.getAttribute("pc"); if (pc == null) { pc = new PageController(); List listOperateBig = operatelogFacade.selectOperatelog(user1 .getUserID()); pc.setBigList((ArrayList) listOperateBig); request.setAttribute("pc", pc); } pc.setCurentPage(request.getParameter("PageIndex")); listOperate = pc.getSmallList(); if ("1".equals(user1.getSystemRole())) { return "authorOperate"; } else if ("2".equals(user1.getSystemRole())) { return "auditOperate"; } return "error"; } }
struts.xml
<action name="authorOperatelog" class="articles.action.ArticleAction" method="operateList"> <result name="authorOperate">/author/author_operatelog.jsp</result> <interceptor-ref name="sessionInterceptor"></interceptor-ref> </action>
author_operatelog.jsp
<%@ page language="java" contentType="text/html;charset=gbk"%> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head> <title>刊物文章管理系统</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body bgcolor="#ceeef4"> <div align="center"> <p> <br> <font size="5" color="#000099"><b>操作日志</b> </font> </p> <table cellspacing="0" cellpadding="5" border="1" width="90%"> <tr bgcolor="#bebef4"> <td width="20%"> <b><font size="4">操作类型</font> </b> </td> <td width="50%"> <b><font size="4">操作对象</font> </b> </td> <td width="30%"> <b><font size="4">操作时间</font> </b> </td> </tr> <s:iterator value="listOperate" status="stat"> <tr <s:if test="#stat.even"> bgcolor="#D7EBFF" </s:if>> <td> <s:property value="operateType" /> </td> <td> <s:property value="destination" /> </td> <td> <s:property value="operateDatetime" /> </td> </tr> </s:iterator> </table> <s:set name="myAction" value="%{'authorOperatelog'}" scope="action" /> <s:include value="../pageController.jsp" /> </div> </body> </html>
pageController.jsp
<%@ page language="java" contentType="text/html;charset=gbk"%> <%@ taglib prefix="s" uri="/struts-tags"%> <s:if test="pc.pageCount == 0"> </s:if> <s:else> <p align="center"> <a href='<s:url action="%{#attr.myAction}"> <s:param name="PageIndex" value="1"/></s:url>'>[首页]</a> <s:if test="pc.firstPage == false"> <a href='<s:url action="%{#attr.myAction}"> <s:param name="PageIndex" value="pc.prePageIndex"/></s:url>'>[上一页]</a> </s:if> <s:if test="pc.lastPage == false"> <a href='<s:url action="%{#attr.myAction}"> <s:param name="PageIndex" value="pc.nextPageIndex"/></s:url>'>[下一页]</a> </s:if> <a href='<s:url action="%{#attr.myAction}"> <s:param name="PageIndex" value="pc.pageCount"/></s:url>'>[尾页]</a> 第[ <s:property value="pc.curentPageIndex" /> ]页 共[ <s:property value="pc.pageCount" /> ]页 </p> </s:else>