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/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/s/1hrQBXyO

更多推荐

Java如何做到分页显示