JFinal框架學習-----paginate分頁

  1.JFinal實現分頁要藉助於其Model和DB提供的分頁API:

  paginate(int pageNumber, int pageSize, String select, String sqlExceptSelect, Object... paras)javascript

    其中的參數含義分別爲:當前頁的頁號、每頁數據條數、sql語句的select部分、sql語句除了select之外的部分、      查詢參數。
 JFinal官方文檔:http://www.jfinal.com/doc/5-6css

2.下面咱們來看看這個API是如何使用的:

首先,paginate會將select以及sqlExcepSelect整合造成一個sql語句(select * from blog where id < ?),佔位符的值則是第五個參數paras的值。pageNumber以及pageSize則是當前頁的頁數以及每頁數據的條數。html

3.在BlogController.class中:

首先,咱們先從前端頁面獲取一個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");
    }

4.在blog文件夾中新建一個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:

完成這些步驟後,咱們的分頁查詢功能已實現了

相關文章
相關標籤/搜索