主要思想,将要分面的数据全部取出。放入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>

本文介绍了一个简单的分页控制器PageController的设计思路与实现细节,该控制器能够处理数据分页展示的需求,包括计算总页数、确定当前页显示的数据范围等。
3062

被折叠的 条评论
为什么被折叠?



