Java如何做到分页显示

来源:互联网 发布:淘宝获取商品id 编辑:程序博客网 时间:2024/05/16 07:15

Java如何做到分页显示

分析需求:

必须返回:总页数(int)+查询的表数据(List<Map<String,String>>)
因此可封装成:

            int pageCount;             List<Map<String,String>>  datas;            Map<String,Object> map = new HashMap<String,Object>();            map.put("pageCount",pageCount);            map.put("datas",datas);

这里写图片描述
Java方面
写一个DAO:

public interface PageDAO {    public Map<String,Object> query(Integer pageNo) throws Exception;}

他的实现类

@Override    public Map<String, Object> query(Integer pageNo) throws Exception {        Map<String, Object> result= new HashMap<String, Object>();        //每一页显示10个数据        int pageSize= 10;        //计算总页数    总页数= 行数 / pageSize +(行数%pageSize==0 ? 0:1)        //总行数        String sql = "SELECT COUNT(1) FROM stud ";        QueryRunner run = new QueryRunner(C3p0Pool.getDataSource());        int rows = Integer.parseInt(""+run.query(sql, new ScalarHandler()));        int pageCount = rows/pageSize  +(rows%pageSize==0? 0 : 1 ) ;        result.put("pageCount",pageCount);//封装总页数        //查询表数据        int stratN= (pageNo-1)*pageSize;        sql= "select * from stud limit "+ stratN +","+ pageSize;        List<Map<String,Object>> datas = run.query(sql, new MapListHandler());        result.put("datas",datas);        return result;    }

Web方面:
在indexjsp页面直接跳转
这里写图片描述

PageServlet:

public class PageServlet extends HttpServlet {    // 注入service    IPageService service = new PageService();    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        doPost(request, response);    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        // 当前要查询的页 序号        String sPageNo = request.getParameter("page");        if (sPageNo == null || sPageNo.trim().length() == 0) {            sPageNo = "1";        }        Integer pageNo = null;        try {            pageNo = Integer.parseInt(sPageNo);        } catch (NumberFormatException e) {            System.out.println("页面异常");        }        // 调用service        try {            Map<String, Object> res = service.query(pageNo);            //往res中 添加当前的页序号            res.put("currentPage", pageNo);            //导向分页后的页面              request.setAttribute("res", res);            request.getRequestDispatcher("/jsps/show.jsp").forward(request, response);        } catch (Exception e) {            System.out.println("导向错误页面");        }    }}

show.jsp
导入标准标签库:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

然后从后台用EL表达式拿数据:

<body>    <h3>学生信息</h3>    <!-- 类似于增强for循环,从res.datas(后台把查询到的信息放到此)中拿,    放到map中,在从map中用EL表达式拿 -->    <c:forEach items="${res.datas}" var="map">        ${map.id} , ${map.name }<br />    </c:forEach>    <hr /><!-- 后台封装了一个当前页currentPage,判断是否是第一页,不是就加一个上一页 -->    <c:set value="${res.pageCount}" var="pageCount"></c:set>    <c:if test="${res.currentPage != 1}">        <a href="<c:url value='/PageServlet?page=${res.currentPage-1}'/>">上一页</a>  &nbsp;        </c:if><!-- 用for循环,从1开始到总页数pageCount, -->    <c:forEach begin="1" end="${pageCount}" var="idx">        <c:if test="${res.currentPage == idx}">            ${idx}&nbsp;        </c:if><!-- 判断是否为当前页,不是则将现在的页码,用url传到后台,由后台处理 -->        <c:if test="${res.currentPage != idx}">            <a href="<c:url value='/PageServlet?page=${idx}'/>">${idx}</a> &nbsp;        </c:if>    </c:forEach>    <c:if test="${res.currentPage != pageCount}">        <a href="<c:url value='/PageServlet?page=${res.currentPage+1}'/>">下一页</a>  &nbsp;        </c:if>    <hr />    <!--这是用下拉菜单的形式做分页查询 -->    <select onchange="sub(this)">        <c:forEach begin="1" end="${pageCount}" var="idx">            <option <c:if test='${idx==res.currentPage }'>selected</c:if> value="${idx }">第${idx }页</option>        </c:forEach>    </select>    <script type="text/javascript">        function sub(obj) {            window.location.href="<c:url value='/PageServlet?page='/>"+ obj.value;        }    </script></body>

连接池的工具包
http://pan.baidu.com/s/1hrQBXyO

原创粉丝点击