对于页面分页的代码分析

首先,在进行分页处理之前要给分页写一个bean,存储来自页面请求的数据,然后进行处理,返回到页面。一般代码如下:

import java.util.List;

public class PageBean {

    private int totalData;               //总记录数
    private int pagesize;               //一页记录数
    private int totalPage;               //总页数
    private int currentPage;             //当前页数
    private int showPage;               //显示多少页,默认显示10页,仿谷歌分页
    private int beginPage;              //起始页数
    private int endPage;                //结束页数
    private boolean hasPreviousPage;    //是否有前一页
    private boolean hasNextPage;        //是否有后一页
    private List list;

    public PageBean() {
        pagesize = 5;
        currentPage = 1;
        showPage = 10;
    }

    public int getTotalData() {
        return totalData;
    }

    public void setTotalData(int totalData) {
        this.totalData = totalData;
    }

    public int getPagesize() {
        return pagesize;
    }

    public void setPagesize(int pagesize) {
        this.pagesize = pagesize;
    }

    public int getTotalPage() {
        return totalData % pagesize == 0 ? totalData / pagesize : totalData / pagesize + 1;
    }

    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }

    public int getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

    public int getShowPage() {
        return showPage;
    }

    public void setShowPage(int showPage) {
        this.showPage = showPage;
    }

    /**
     * 初始化页面中起始和结束页码,注意在setTotalPage()之后调用此方法
     */
    public void initbeginPageAndEndPage() {
        totalPage=getTotalPage();
        //总页数小于6
        if (this.totalPage < (this.showPage / 2) + 1) {
            this.beginPage = 1;
            this.endPage = totalPage;
        } else {
            //总页数大于6,但是当前页数小于6
            if (this.currentPage <= (showPage / 2) + 1) {
                this.beginPage = 1;
                if (this.totalPage >= this.showPage) {
                    this.endPage = this.showPage;
                } else {
                    this.endPage = this.totalPage;
                }
            } else {
                //总页数大于6,且当前页数大于6
                this.beginPage = currentPage - 5;
                this.endPage = currentPage + 4;
                if (this.endPage >= this.totalPage) {
                    this.endPage = this.totalPage;
                }
            }
        }
    }

    public int getBeginPage() {
        return beginPage;
    }

    public void setBeginPage(int beginPage) {
        this.beginPage = beginPage;
    }

    public int getEndPage() {
        return endPage;
    }

    public void setEndPage(int endPage) {
        this.endPage = endPage;
    }

    public boolean isHasPreviousPage() {
        return currentPage!=1;
    }

    public void setHasPreviousPage(boolean hasPreviousPage) {
        this.hasPreviousPage = hasPreviousPage;
    }

    public boolean isHasNextPage() {
        return currentPage!=totalPage;
    }

    public void setHasNextPage(boolean hasNextPage) {
        this.hasNextPage = hasNextPage;
    }

    public List getList() {
        return list;
    }

    public void setList(List list) {
        this.list = list;
    }


}
然后,通过servlet对从数据库中得到的数据进行处理;

package test.servlet;

import java.io.IOException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;

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

import org.apache.lucene.queryParser.ParseException;

import test.bean.PageBean;
import test.bean.ReportBean;
import test.search.IndexSearch;

public class doServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		String searchWord = request.getParameter("searchWord");
		/*
		 * 处理字符编码问题
		 */
		searchWord = new String(searchWord.getBytes("iso-8859-1"), "UTF-8");
		searchWord = java.net.URLDecoder.decode(searchWord, "UTF-8");
		String field = request.getParameter("field");
		field = java.net.URLDecoder.decode(field, "UTF-8");
		String pageURLparam = setPageURL(searchWord, field);
		request.setAttribute("searchWord", searchWord);
		request.setAttribute("field", field);
		request.setAttribute("pageURLparam", pageURLparam);
		String str = URLDecoder.decode(request.getParameter("currentPage"),
				"UTF-8");
		int currentPage = Integer.parseInt(str);
		int size = 5;
		String indexDir = "E://indexDir";
		IndexSearch is = new IndexSearch();
		List<ReportBean> totalList = new ArrayList<ReportBean>();
		List<ReportBean> resultList = new ArrayList<ReportBean>();
		int totalData = 0;
		double startTime = System.currentTimeMillis();
		try {
			totalList = is.Search(indexDir, searchWord, field, 20000);
			totalData = totalList.size();
		} catch (ParseException e) {
			e.printStackTrace();
		}
		PageBean pageBean = new PageBean();
		pageBean.setCurrentPage(currentPage);
		pageBean.setTotalData(totalData);
		pageBean.initbeginPageAndEndPage();
		pageBean.setList(resultList);
		request.setAttribute("pageBean", pageBean);
		double endTime = System.currentTimeMillis();
		double searchtime = (endTime - startTime) / 1000;
		request.setAttribute("searchtime", searchtime);
		request.setAttribute("totalData", totalData);
		for (int i = (currentPage - 1) * size; i < currentPage * size; i++) {
			resultList.add(totalList.get(i));
		}
		request.setAttribute("resultList", resultList);
		request.getRequestDispatcher("/WEB-INF/resultjsp/searchResult.jsp")
				.forward(request, response);
	}

	private String setPageURL(String searchWord, String field) {
		String pageURL = "doServlet?searchWord=" + searchWord + "&field="
				+ field;
		return pageURL;
	}
}
最后,单独写一个分页的页面,在运用的时候,直接在别的页面通过import标签直接拿来就用:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link href="${pageContext.request.contextPath}/style/reset.css" type="text/css" rel="stylesheet"/>
    <link href="${pageContext.request.contextPath}/style/quoteAnalysis.css" type="text/css" rel="stylesheet"/>
    <script type="text/javascript">
        function goPage(){
            var somePage=$("#somePage").val();
            if(somePage==""){
                alert("页数不能为空");
            }else if(isNaN(somePage)){
                alert("页数必须为数字");
            }else if(parseInt(somePage)<0 || parseInt(somePage)>${pageBean.totalPage}){
                alert("页数必须为在0到${pageBean.totalPage}之间");
            }else{
                window.location.href="${pageURLparam}¤tPage="+somePage;
            }
        }
    </script>
</head>
<body>
<div class="pagination">
    <c:if test="${pageBean.hasPreviousPage}">
        <a href="${pageURLparam}¤tPage=${pageBean.currentPage-1}">上一页</a>
    </c:if>

    <c:forEach begin="${pageBean.beginPage}" end="${pageBean.endPage}" step="1" varStatus="v">
        <a href="${pageURLparam}¤tPage=${v.index}">
            <c:if test="${pageBean.currentPage==v.index}"> <b style="font-color:black"> </c:if>
            [${v.index}]
            <c:if test="${pageBean.currentPage==v.index}"> </b> </c:if>
        </a>
    </c:forEach>

    <c:if test="${pageBean.hasNextPage}">
        <a href="${pageURLparam}&${pageBean.currentPage+1}">下一页</a>
    </c:if>
    <input class="txt" type="text" id="somePage"/><input class="btn" type="button" value="Go" οnclick="goPage()"/> 共${pageBean.totalPage}页
</div>
</body>
</html>
大体的页面分页都是按照这样的方法和思路去处理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值