1.一开始用servlet写的分页.
这个时候分页写的很不成熟,而且由于我要求table换色的原因使原来的分页变的更加复杂
2.基于struts 的分页
有3个java文件,一个ActionForm,一个Action,一个Pager对象
1)PageForm
import org.apache.struts.action.ActionForm;
public class PageForm extends ActionForm{
private int pageSize=5;
private int pageNo=1;
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
}
2)PageAction
public class PagerAction extends MappingDispatchAction{
public ActionForward QueryByPage(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
PageForm pf=(PageForm)form;
ActionForward forward=mapping.findForward(request.getParameter("service"));//找到需要分页的session中的对象
HttpSession session = request.getSession();
session.removeAttribute("pageList");
session.removeAttribute("pager");
ArrayList result=(ArrayList)session.getAttribute(request.getParameter("result"));
int pageNo=pf.getPageNo();//获得请求页码
Pager pager=new Pager(pageNo,result);//获得相应页码的信息
ArrayList pageList=pager.getPageList();//将请求页的信息传递回页面中
session.setAttribute("pageList", pageList);
session.setAttribute("pager",pager);
return forward;
}
}
3)Pager类
public class Pager {
private int pageSize=5; //每页的页数
private int pageNo=1; //页码
private int rowCount=0;//总行数
private int pageCount=1;//总页数
private int startIndex=1;//开始行
private int endIndex=5;//结束行
private int firstPageNo=1;//第一页
private int prePageNo=1;//前一页
private int nextPageNo=1;//下一页
private int lastPageNo=1;//最后一页
private List resultList;//结果列表
public Pager(int pageNo,List resultList)
{
this.pageNo=pageNo;
this.rowCount=resultList.size();
this.resultList=resultList;//获得条目列表
this.pageCount=rowCount % pageSize > 0 ? (rowCount / pageSize) + 1 : rowCount / pageSize;//通过总行数计算页数
this.nextPageNo=pageNo + 1 > pageCount ? pageCount : pageNo + 1; //通过传 递的页码计算前一页和下一页
this.prePageNo=pageNo - 1 < 1 ? 1 : pageNo - 1;
this.startIndex=pageSize*(pageNo-1); //计算这一行开始条目为总条目的第几个
this.endIndex=pageSize*pageNo>rowCount?rowCount:pageSize*pageNo;//计算这一行的结束条目为总条目的第几个
this.lastPageNo=pageCount;//尾页为总页数
}
public ArrayList getPageList()
{
ArrayList result=new ArrayList();
for(int i = (pageNo - 1) * pageSize ; i < ((pageNo * pageSize) > rowCount? rowCount : (pageNo * pageSize)) ; i++)
{
result.add(resultList.get(i));
}
return result;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public int getRowCount() {
return rowCount;
}
public void setRowCount(int rowCount) {
this.rowCount = rowCount;
}
public int getPageCount() {
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
public int getStartIndex() {
return startIndex;
}
public void setStartIndex(int startIndex) {
this.startIndex = startIndex;
}
public int getEndIndex() {
return endIndex;
}
public void setEndIndex(int endIndex) {
this.endIndex = endIndex;
}
public int getFirstPageNo() {
return firstPageNo;
}
public void setFirstPageNo(int firstPageNo) {
this.firstPageNo = firstPageNo;
}
public int getPrePageNo() {
return prePageNo;
}
public void setPrePageNo(int prePageNo) {
this.prePageNo = prePageNo;
}
public int getNextPageNo() {
return nextPageNo;
}
public void setNextPageNo(int nextPageNo) {
this.nextPageNo = nextPageNo;
}
public int getLastPageNo() {
return lastPageNo;
}
public void setLastPageNo(int lastPageNo) {
this.lastPageNo = lastPageNo;
}
public List getResultList() {
return resultList;
}
public void setResultList(List resultList) {
this.resultList = resultList;
}
}
4.在页面添加一个div
首页
上一页
下一页
尾页
当前第页,总共页
当然在配置文件中也要改相应的配置文件,做跳转
原理:
先将查询出来的所有内容存在session的result中,并将第一页存在pageList中,Pager保存页面信息也传递到jsp页面中.
当点击下一页时,把result和Pager属性作为参数传递给Action,在Action中获得请求的页数并获得相应页数的内容,存在session中并返回到页面