前段時間有位細心的網友跟我說JFinalUIB中的分頁存在bug,我很疑惑,可是問題確實存在,調試一番,發現是JFinal的分頁方法自己存在這個問題,下面就bug產生的緣由和問題作下記錄,給全部JFinal學習使用者一個提示和解決方法前端
咱們以功能查詢頁面來測試java
點擊功能管理,進入功能列表,沒有任何查詢條件,顯示全部數據後端
在查詢條件中URL中輸入「/jf/wx/keyword/view」,不點擊查詢按鈕,而是選擇跳轉到第3頁,分頁參數是查詢指定的URL並顯示第3頁數據學習
而數據自己只存在一條,第3頁必然是空測試
點擊查詢按鈕,是能夠查出來這行數據的調試
做爲前端頁面,本身只負責數據的展現,是沒法處理數據的查詢驗證的,也許傳遞的參數存在不合理的地方,可是後端要儘量的屏蔽此類問題。分析完JFinalUIB本身的分頁包裝對象SplitPage後,發現問題不在於此,由於SplitPage也是並無處理數據的查詢驗證,只是對JFinal的Page參數在外層進行了擴展封裝,接着查看JFinal的分頁源碼,DbPro.java中的doPaginate方法code
若是當前頁的頁碼大於總頁數,返回空數據...對象
if (pageNumber > totalPage) { return new Page<Record>(new ArrayList<Record>(0), pageNumber, pageSize, totalPage, (int)totalRow); }
應該這樣來作,當前頁的頁碼大於總頁數時,當前頁應該顯示最大頁的數據才合理,在咱們此次測試中,也就是應該顯示第1頁數據,就不會返回空數據了源碼
if (pageNumber > totalPage) { //return new Page<Record>(new ArrayList<Record>(0), pageNumber, pageSize, totalPage, (int)totalRow); pageNumber = totalPage; // 修復分頁bug,這樣會存在pageNumber過大致使空數據,很是不友好 }