JFinal框架学习-----paginate分页
1.JFinal实现分页要借助于其Model和DB提供的分页API:
paginate(int pageNumber, int pageSize, String select, String sqlExceptSelect, Object… paras)
其中的参数含义分别为:当前页的页号、每页数据条数、sql语句的select部分、sql语句除了select以外的部分、 查询参数。
JFinal官方文档:http://www.jfinal.com/doc/5-6
2.下面我们来看看这个API是如何使用的:
首先,paginate会将select以及sqlExcepSelect整合形成一个sql语句(select * from blog where id < ?),占位符的值则是第五个参数paras的值。pageNumber以及pageSize则是当前页的页数以及每页数据的条数。
3.在BlogController.class中:
首先,我们先从前端页面获取一个pageNumber,这是当前页码数。然后对该页码数进行处理,若页码数为null,则显示第一页信息。
(注:Jfinal中的render(String) 方法只支持某一种视图层,默认是支持Freemarker。若希望同时支持JSP,则可使用renserJSP(String) 去返回一个Jsp页面)
/**
* 分页查询
*/
public void paginate(){
Integer pageNumber=getParaToInt(“pageNumber”);
if(pageNumber==null){
pageNumber=1;
}
Page page= Blog.dao.paginate(pageNumber,5,“select *”,“from blog”);
setAttr(“blogPage”,page);
renderJsp(“Page.jsp”);
}
4.在blog文件夹中新建一个Page.jsp:**
(1)在获取后台传递过来的数据的时候,我们要注意因为在控制器中,我们调用分页方法paginate()后,返回的是一个Page对象,查看Page的源码的时候,Page包含四个属性:分页返回结果的list集合,当前页码数,每一页的数据条数,总的分页数,总的行数。
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
<%@ page language=“java” contentType=“text/html; charset=UTF-8” import=“java.io.IOException” %>
id | 标题 | 内容 | 类型 | 操作 |
---|---|---|---|---|
${blog.id} | ${blog.title} | ${blog.content} | ${blog.category} | 删除 |
<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>
最后,我们运行项目,并查看一下结果:
点击第一页时,会向后台传递pageNumber为1的值: