分页算法

public class Page {
private int currentPage = 1; // 当前页

private int totalPages = 0; // 总页数

private int pageRecorders = 5; // 每页5行数据

private int totalRows = 0; // 总数据行数

private int pageStartRow = 0; // 每页的起始数

private int pageEndRow = 0; // 每页显示数据的终止数

private boolean hasNextPage = false; // 是否有下一页

private boolean hasPreviousPage = false; // 是否有前一页

private List list;

public Page() {
}

public Page(List list) {
   this.list = list;

   totalRows = list.size();

   hasPreviousPage = false;
   currentPage = 1;
   if ((totalRows % pageRecorders) == 0) {
    totalPages = totalRows / pageRecorders;
   } else {
    totalPages = totalRows / pageRecorders + 1;
   }

   if (currentPage >= totalPages) {
    hasNextPage = false;
   } else {
    hasNextPage = true;
   }

   if (totalRows < pageRecorders) {
    this.pageStartRow = 0;
    this.pageEndRow = totalRows;
   } else {
    this.pageStartRow = 0;
    this.pageEndRow = pageRecorders;
   }
}

/**
* @return Returns the currentPage.
*/
public String getCurrentPage() {
   return this.toString(currentPage);
}

/**
* @param currentPage
*            The currentPage to set.
*/
public void setCurrentPage(int currentPage) {
   this.currentPage = currentPage;
}

/**
* @return Returns the pageRecorders.
*/
public int getPageRecorders() {
   return pageRecorders;
}

/**
* @param pageRecorders
*            The pageRecorders to set.
*/
public void setPageRecorders(int pageRecorders) {
   this.pageRecorders = pageRecorders;
}

/**
* @return Returns the pageEndRow.
*/
public int getPageEndRow() {
   return pageEndRow;
}

/**
* @return Returns the pageStartRow.
*/
public int getPageStartRow() {
   return pageStartRow;
}

/**
* @return Returns the totalPages.
*/
public String getTotalPages() {

   return this.toString(totalPages);
}

/**
* @return Returns the totalRows.
*/
public String getTotalRows() {
   return this.toString(totalRows);
}

/**
* @return Returns the hasNextPage.
*/
public boolean isHasNextPage() {
   return hasNextPage;
}

/**
* @param hasNextPage
*            The hasNextPage to set.
*/
public void setHasNextPage(boolean hasNextPage) {
   this.hasNextPage = hasNextPage;
}

/**
* @return Returns the hasPreviousPage.
*/
public boolean isHasPreviousPage() {
   return hasPreviousPage;
}

/**
* @param hasPreviousPage
*            The hasPreviousPage to set.
*/
public void setHasPreviousPage(boolean hasPreviousPage) {
   this.hasPreviousPage = hasPreviousPage;
}

public void getFirstPage() {
   currentPage = 1;
   hasPreviousPage = false;
   if (currentPage >= totalPages) {
    hasNextPage = false;
   } else {
    hasNextPage = true;
   }
}

public void getNextPage() {
   currentPage = currentPage + 1;
   if ((currentPage - 1) > 0) {
    hasPreviousPage = true;
   } else {
    hasPreviousPage = false;
   }

   if (currentPage >= totalPages) {
    hasNextPage = false;
   } else {
    hasNextPage = true;
   }
}

public void getPreviousPage() {
   currentPage = currentPage - 1;

   if (currentPage == 0) {
    currentPage = 1;
   }

   if (currentPage >= totalPages) {
    hasNextPage = false;
   } else {
    hasNextPage = true;
   }
   if ((currentPage - 1) > 0) {
    hasPreviousPage = true;
   } else {
    hasPreviousPage = false;
   }
}

public void getLastPage() {
   currentPage = totalPages;
   if (currentPage == 0) {
    currentPage = 1;
   }
   hasNextPage = false;
   if ((currentPage - 1) > 0) {
    hasPreviousPage = true;
   } else {
    hasPreviousPage = false;
   }
}

public void setGotoPage(int gotoPage) {
   this.currentPage = gotoPage;
   hasNextPage = true;
   hasPreviousPage = true;
   if (currentPage <= 1) {
    currentPage = 1;
    hasNextPage = true;
    hasPreviousPage = false;
   }
   if (currentPage >= this.totalPages) {
    currentPage = totalPages;
    hasNextPage = false;
    hasPreviousPage = true;
   }
}

@SuppressWarnings("unchecked")
public List getPageList() {
   if (currentPage * pageRecorders < totalRows) {// 判断是否为最后一页
    pageEndRow = currentPage * pageRecorders;
    pageStartRow = pageEndRow - pageRecorders;
   } else {
    pageEndRow = totalRows;
    pageStartRow = pageRecorders * (totalPages - 1);
   }
   List testlist = new ArrayList();
   int j = 0;
   for (int i = pageStartRow; i < pageEndRow; i++) {
    Object obj = list.get(i);
    testlist.add(j, obj);
    j++;
   }
   return testlist;
}

public String toString(int temp) {
   String str = Integer.toString(temp);
   return str;
}

}

 

struts调用此分页的方法:action中

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.langsin.computer.service.IUserService;
import org.langsin.computer.util.Page;
import org.langsin.computer.vo.User;
import org.langsin.computer.web.core.BaseAction;

/**
* MyEclipse Struts Creation date: 06-04-2007
*
* XDoclet definition:
*
* @struts.action validate="true"
*/
public class FindUserAction extends BaseAction {
private IUserService userService;

public IUserService getUserService() {
   return userService;
}

public void setUserService(IUserService userService) {
   this.userService = userService;
}

private List list;

private Page page;

public ActionForward findAll(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {

   String action = null;
   action = request.getParameter("action");

   if (action == null || "action".equals(action)) {
  
    list = userService.findAll();

    page = new Page(list);
    list = page.getPageList();
    request.setAttribute("list", list);
    request.setAttribute("page", page);
   } else {
  
    if (action == "firstPage" || action.equals("firstPage")) {
   

     page.getFirstPage();
     list = page.getPageList();
     request.setAttribute("list", list);

     request.setAttribute("page", page);
    }
    if (action == "nextPage" || action.equals("nextPage")) {

     page.getNextPage();
     list = page.getPageList();
     request.setAttribute("list", list);

     request.setAttribute("page", page);
    }
    if (action == "previousPage" || action.equals("previousPage")) {
     page.getPreviousPage();
     list = page.getPageList();
     request.setAttribute("list", list);

     request.setAttribute("page", page);
    }
    if (action == "lastPage" || action.equals("lastPage")) {
     page.getLastPage();
     list = page.getPageList();
     request.setAttribute("list", list);

     request.setAttribute("page", page);
    }

   }
   return mapping.findForward("user");
}
public ActionForward findById(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {
   String id=request.getParameter("id");
   User user=userService.findById(new Integer(id));
   request.setAttribute("user", user);
   return mapping.findForward("updateUser");
}
}

 

而在前台jsp页页的写法:

<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="
http://jakarta.apache.org/struts/tags-bean"
prefix="bean"%>
<%@ taglib uri="
http://jakarta.apache.org/struts/tags-html"
prefix="html"%>
<%@ taglib uri="
http://jakarta.apache.org/struts/tags-logic"
prefix="logic"%>
<html>
<head>
   <title>显示所有用户列表</title>
</head>
<body>
   显示列表
   <hr>
   <table border="1">
    <tr>
     <td>
      用户名
     </td>
     <td>
      密码
     </td>
     <td>
      修改
     </td>
     <td>
      删除
     </td>
    </tr>
    <logic:present name="list">
     <logic:iterate id="element" name="list">

      <tr>
       <td>
        <bean:write name="element" property="username" />
       </td>
       <td>
        <bean:write name="element" property="usepwd" />
       </td>
       <td>
       <a href="findUser.do?method=findById&id=<bean:write name="element" property="userid" />">修改</a>
      
       </td>
       <td>
        删除
       </td>
      </tr>

     </logic:iterate>
    </logic:present>

 

   </table>

   <html:link page="/findUser.do?method=findAll&action=firstPage">首页</html:link>

   <logic:equal name="page" property="hasNextPage" value="true">
    <html:link page="/findUser.do?method=findAll&action=nextPage">下一页</html:link>
   </logic:equal>
   <logic:equal name="page" property="hasNextPage" value="false">
             下一页
        </logic:equal>

   <logic:equal name="page" property="hasPreviousPage" value="true">
    <html:link page="/findUser.do?method=findAll&action=previousPage">上一页</html:link>
   </logic:equal>
   <logic:equal name="page" property="hasPreviousPage" value="false">
             上一页
        </logic:equal>

   <html:link page="/findUser.do?method=findAll&action=lastPage">尾页</html:link>
   <br>
   共有数据
   <bean:write name="page" property="totalRows" />
   条; 共分
   <bean:write name="page" property="totalPages" />
   页,当前是第
   <bean:write name="page" property="currentPage" />
   页
   <br>
   <a href="addUser.jsp">创建用户</a>

</body>
</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值