要对数据在前台进行分页显示,首先要了解几个数据:
1.数据有多少条(count)
2.每页显示几条数据(pageSize)
---count的值通过遍历数据所在的表来获得()
public static int Count(String tablename) { conn = DBTool.getConnection(); String sql = "select count(1) from "+tablename+" "; int num = 0; try { ps = conn.prepareStatement(sql); // ps.setString(1,tablename); ResultSet rs = ps.executeQuery(); if(rs.next()) { num = rs.getInt(1); } } catch (SQLException e) { e.printStackTrace(); }finally { DBTool.closeConnection(); } return num;
}
获取的大致方法可参照上方代码
---pageSize的值由自己指定
两个值得到后你可以通过计算得到末页的数值(lastPage)
lastPage=count%pageSize ? count/pageSize : count/pageSize+1;(三元表达式不熟的可以百度一下)
大致意思就是如果pageSize被count整除(用取余来判断最终整除的情况,没有余数就是能整除),那么末页的值就等于count/pageSize的值,如果不被整除,末页的值就应该等于count/pageSize+1(这是一个简单的数学常识问题,我可能说不大明白,不懂的思考下)
准备工作完成后,开始处理主要的逻辑
分页操作的话前台设定的操作一般为:首页 上一页 下一页 末页
你需要在后台设定一个值代表当前页面要显示页数(index)
首页 index=1
上一页/下一页 index = index±1
末页 index=lastPage
后台代码如下
public void queryTasks(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String page = request.getParameter("index");//或取前台传过来的页数,如果为空,设定页数为首页 int index = 1; if(page == null || !(page.length()>0)) { index= 1; }else { index = Integer.parseInt(page); } int num = service.CountTaskNum();//任务总数 int pageSize = 5;//每页显示5条任务信息 int lastPage = num%pageSize==0?num/pageSize:num/pageSize+1; if(index<=1) {//当在首页点击上一页或末页点击下一页的逻辑处理 index =1; }else if(index >= lastPage) { index = lastPage; } List<Task> tasks = service.queryTasks((index-1)*pageSize, pageSize); List<String> list = new ArrayList<>(); for(int i = 0;i<tasks.size();i++) { String[] res1 = tasks.get(i).getTaskReward().split("\*"); String[] res2 = tasks.get(i).getTaskRewardNum().split("\*"); String result = ""; for(int j = 0;j<res1.length;j++) { if(!("").equals(res1[j]) && !("").equals(res2[j])) { System.out.println(res1[j]+"*"+res2[j]); result+=res1[j]+"*"+res2[j]; } } list.add(result); } request.setAttribute("reward",list); request.setAttribute("tasks", tasks); request.setAttribute("index", index); request.setAttribute("last",lastPage); request.getRequestDispatcher("showTask.jsp").forward(request, response); }
代码部分参照即可。
前台的按钮代码
<a href="TaskServlet?method=queryTasks&index=1">首页</a> <a href="TaskServlet?method=queryTasks&index=${index-1}">上一页</a> <a href="TaskServlet?method=queryTasks&index=${index+1}">下一页</a> <a href="TaskServlet?method=queryTasks&index=${last}">尾页</a>
大致情况就是这样了