paginate(int pageNumber, int pageSize, String select, String sqlExceptSelect, Object... paras)javascript
其中的参数含义分别为:当前页的页号、每页数据条数、sql语句的select部分、sql语句除了select之外的部分、 查询参数。
JFinal官方文档:http://www.jfinal.com/doc/5-6css
首先,paginate会将select以及sqlExcepSelect整合造成一个sql语句(select * from blog where id < ?),占位符的值则是第五个参数paras的值。pageNumber以及pageSize则是当前页的页数以及每页数据的条数。html
首先,咱们先从前端页面获取一个pageNumber,这是当前页码数。而后对该页码数进行处理,若页码数为null,则显示第一页信息。前端
(注:Jfinal中的render(String) 方法只支持某一种视图层,默认是支持Freemarker。若但愿同时支持JSP,则可以使用renserJSP(String) 去返回一个Jsp页面)java
/** * 分页查询 */ public void paginate(){ Integer pageNumber=getParaToInt("pageNumber"); if(pageNumber==null){ pageNumber=1; } Page<Blog> page= Blog.dao.paginate(pageNumber,5,"select *","from blog"); setAttr("blogPage",page); renderJsp("Page.jsp"); }
(1)在获取后台传递过来的数据的时候,咱们要注意由于在控制器中,咱们调用分页方法paginate()后,返回的是一个Page<T>对象,查看Page<T>的源码的时候,Page<T>包含四个属性:分页返回结果的list集合,当前页码数,每一页的数据条数,总的分页数,总的行数。jquery
在jsp页面中,获取查询到的数据结果:sql
(2)分页组件的实现:bootstrap
(3)Page.jsp页面的完整代码:jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page language="java" contentType="text/html; charset=UTF-8" import="java.io.IOException" %> <html th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Document</title> <mate naem="Viewport" content="width=drive-width, user-scalable=no,initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0"></mate> <link rel="stylesheet" href="/bootstrap/css/bootstrap.css"> </head> <body> <script type="text/javascript" src="/bootstrap/js/jquery-3.3.1.min.js"></script> <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script> <ul class="nav nav-pills"> <li role="presentation" class="active"><a href="/blog/queryAllBlog">Home</a></li> <li role="presentation"><a href="/blog/addBlog.html">AddBlog</a></li> <li role="presentation"><a href="#">Messages</a></li> </ul> <div> </div> <div class="container"> <table class="table table-hover"> <tr> <th>id</th> <th>标题</th> <th>内容</th> <th>类型</th> <th>操做</th> </tr> <c:forEach items="${blogPage.list}" var="blog" > <tr> <td>${blog.id}</td> <td>${blog.title}</td> <td>${blog.content}</td> <td>${blog.category}</td> <td> <a href="/blog/pageDelete/${blog.id}">删除</a> </td> </tr> </c:forEach> </table> <div class="page pull-right"> <nav aria-label="Page navigation"> <ul class="pagination"> <li><a href="/blog/paginate?pageNumber=${blogPage.pageNumber>1?blogPage.pageNumber-1:1}">上一页</a></li> <c:forEach begin="1" end="${blogPage.totalPage}" varStatus="page"> <c:choose> <c:when test="${blogPage.pageNumber==page.index}"> <li class="active"><a href="/blog/paginate?pageNumber=${page.index}">${page.index}</a></li> </c:when> <c:otherwise> <li><a href="/blog/paginate?pageNumber=${page.index}">${page.index}</a></li> </c:otherwise> </c:choose> </c:forEach> <li><a href="/blog/paginate?pageNumber=${blogPage.pageNumber<blogPage.totalPage?blogPage.pageNumber+1:blogPage.totalPage}">下一页</a></li> </ul> </nav> </div> </div> </body> </html>
最后,咱们运行项目,并查看一下结果:spa
点击第一页时,会向后台传递pageNumber为1的值:
点击第二页时,pageNumber的值变成了2:
完成这些步骤后,咱们的分页查询功能已实现了