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<Blog> page= Blog.dao.paginate(pageNumber,5,"select *","from blog"); setAttr("blogPage",page); renderJsp("Page.jsp"); }
4.在blog資料夾中新建一個Page.jsp:
(1)在獲取後臺傳遞過來的資料的時候,我們要注意因為在控制器中,我們呼叫分頁方法paginate()後,返回的是一個Page<T>物件,檢視Page<T>的原始碼的時候,Page<T>包含四個屬性:分頁返回結果的list集合,當前頁碼數,每一頁的資料條數,總的分頁數,總的行數。
在jsp頁面中,獲取查詢到的資料結果:
(2)分頁元件的實現:
(3)Page.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>
最後,我們執行專案,並檢視一下結果:
點選第一頁時,會向後臺傳遞pageNumber為1的值:
點選第二頁時,pageNumber的值變成了2:
完成這些步驟後,我們的分頁查詢功能已實現了