最易懂的layui分頁


該篇文章是在layui前端框架之分頁基礎上簡潔化和詳細化。

首先該示例采用的是Spring+MyBatis Plus+SpringMVC(常規的SSM框架),持久層換成MyBatis也行。

至於layui,官網為:http://www.layui.com/

所有的文檔和相關示例都可以在里面找到,layui是一個開源的前端框架,主要是由一位叫賢心的人在維護。

該框架,在碼雲或者github相關項目應用比較廣,幾乎很多開源項目直接或者間接的采用它。

比如jeesite等。當然我公司項目也采用它,主要是它的彈出層和分頁做的挺不錯的。而且很多組件對於用戶體驗也是很不錯的。

下面進入示例:
需要引入的簡單的說,只要將下列三個引入即可
<link rel="stylesheet" href="layui/css/layui.css">
<script src="js/jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="layui/layui.js"></script>

 

至於放置位置可以,如果是示例工程的話,可以全部放在<head></head>之中,建議先示例工程確認沒問題,再用於生產工程。

生產工程還是老規矩,css文件放置<head</head>之中,js放在<body>結束標簽的前面。以引用的jQuery庫為最上,之所以最上,是因為引用的js文件有一部分是自己編寫的,而且該文件里面用到jQuery,如果放在引用jQuery函數的下面,就會導致jQuery函數不能用,從而導致不能顯示對應的效果。

layui分頁代碼如下所示:

<script>
           
            //裝變量的容器,可以使用多個分頁器
            var dataObj = {
                page_enterprise : 1,
                page_order : 1,
                page_log: 1,
                page_log_info: 1,
                //選擇每頁顯示的數據條數
                limit_enterprise: 10,
                limit_order: 20,
                limit_log:   30,
                limit_log_info: 40
            }
              
             function pageQuery(pageno,companyCode) {
                
     
                var data = {
                       "pageno" : pageno,
                       "pagesize" : dataObj.limit_enterprise,
                       "companyCode":companyCode
                }
               

                $.ajax({
                    url :ZL.url.api.getTodayOrderInfo,
                    type : "GET",
                    data : data,
                    dataType : 'json',
                    success : function(result){
                    
               
                               //獲取后台datas數據
                            var apps = result.page.datas;
                            //獲取數據總數
                            var dataLength=result.page.totalsize;
                            
                            var rows = "";
                            
                            $.each(apps, function(i, app){
                                 /**
                                 * 0 處理中
                                 * 1 成功
                                 * 2 失敗
                                 * 3 取消
                                 * 4 失效
                                 * 5 待支付
                                */
                                //狀態
                                var status=app.orderStatus;
                                 //備注
                                  var remark=app.remark;
                       
                                if(status=="0"){
                                    status="處理中";
                                }else if(status=="1"){
                                    status="成功";
                                }else if(status=="2"){
                                    status="失敗";
                                }else if(status=="3"){
                                    status="取消";
                                }else if(status=="4"){
                                    status="失效";
                                }else if(status=="5"){
                                    status="待支付";
                                }
                                
                                if(remark==null||remark==""){
                                    remark="";
                                }
         
                             
                                rows = rows +  '<tr>';
                                rows=rows +"<td>"+status+"";
                                 rows=rows +"<td>"+app.createTime+"";
                                rows=rows +"<td>"+app.orderResources[0].resourceId+"";
                                rows=rows +"<td>"+app.orderGuest[0].name+"";
                                rows=rows +"<td>"+app.totalAmount+"";
                                rows=rows +"<td>"+remark+"";
                                
                                rows = rows +  '</tr>';
                            });
                            
                            $("#appAccount_list").html(rows);
                            
                            //調用分頁
                            layui.use(['laypage', 'layer'], function() {
                                var laypage = layui.laypage,
                                    layer = layui.layer;
                                laypage.render({
                                    elem: 'enterpriseOrder',
                                    count: dataLength,
                                    limit: dataObj.limit_enterprise,
                                    first: '首頁',
                                    last: '尾頁',
                                    layout: ['count', 'prev', 'page', 'next', 'limit', 'skip'],
                                    curr: dataObj.page_enterprise,
                                    theme: '#00A0E9',
                                    jump:function(obj,first){
                                        if(!first) {
                                        //第一次不執行,一定要記住,這個必須有,要不然就是死循環
                                            var curr = obj.curr;
                                  //更改存儲變量容器中的數據,是之隨之更新數據
                                            dataObj.page_enterprise = obj.curr; 
                                            dataObj.limit_enterprise= obj.limit;
                                  //回調該展示數據的方法,數據展示
                                            pageQuery(curr,companyCode);
                                        }
                                    }
                                });
                            });
                            
                            
                     
                    },error:function(XMLHttpRequest, textStatus, errorThrown){
                     
                         alert(XMLHttpRequest.status);
                       
                       alert(XMLHttpRequest.readyState);
                         
                       alert(textStatus);
                    }
                    
                });
                
            } 
        </script>

我將其放在</body>上面。之所以沒有將其放入一個單獨的js文件,是因為放置單獨的js文件,會導致報錯。這個錯誤我目前還沒有找到原因,不過通過將其放入</body>前面和引入js文件是一樣的效果,只是js

文件方便管理和修改。

 

對應的Controller代碼如下:

	/**
	 * 獲取當天訂單數據
	 * @param request
	 * @return
	 */
	@GetMapping(value="getTodayOrderInfo",produces="application/json;charset=utf-8")
	@ApiOperation(value="獲取當天訂單數據",httpMethod="GET",notes="獲取當天訂單數據")
	public JSONObject getTodayOrderInfo(HttpServletRequest request) {
		
		
		JSONObject json = new JSONObject();
        
		//公司編碼
        String companyCode = request.getParameter("companyCode");
        
        //獲取前台當前頁
        String currentPage = request.getParameter("pageno");
        
        //獲取前台每頁顯示數據
        String pageSize = request.getParameter("pagesize");
        
        //獲取當前時間
        String today= DateUtil.today();
	     
        //將前台通過request獲取的currentPage參數轉為Integer類型
        Integer pageno = Integer.parseInt(currentPage.trim());
        
        //將前台通過request獲取的pageSize參數轉為Integer類型
        Integer pagesize = Integer.parseInt(pageSize.trim());
        
        //將條件放入Map中
        Map<String,Object> conditionMap = new HashMap<String,Object>();
        conditionMap.put("companyCode", companyCode);
        conditionMap.put("createTime", today);
        conditionMap.put("start", (pageno-1)*pagesize);
        conditionMap.put("size", pagesize);
        
        //調用獲取今日訂單數據集合方法
        List<FinanceOrder> list = financeOrderService.getTodayOrderInfo(conditionMap);
        
        //獲取今日訂單數據總數
        int count = financeOrderService.getTodayOrderCount(conditionMap);
     	
        //總頁數計算 初始化為0
        int totalPageCount = 0;
     	 if ( count % pagesize == 0 ) {
         	totalPageCount = count / pagesize;
         } else {
         	totalPageCount = count / pagesize + 1;
         }
     	 
         //判斷集合數據是否為空
	     if(list.size()!=0) {
	
	         Page<FinanceOrder> page = new Page<FinanceOrder>();
	         page.setDatas(list);
	         page.setTotalno(totalPageCount);
	         page.setTotalsize(count);
	         json.put("returnMsg", "獲取今日訂單數據");
	         json.put("page", page);
	         json.put("returnCode", "000000");
	         
	    }else {
	    	json.put("returnMsg", "暫無數據");
	        json.put("returnCode", "111111");
	    }

        return json;
	
	}
	

 

Page類代碼如下:

import java.util.List;

/**
 * 分頁對象
 *
 */
public class Page<T> {

    //數據
    private List<T> datas;
    
    //總條數
    private int totalsize;
    
    //頁碼
    private int pageno;
    
    //每頁條數
    private int pagesize;
    
    //總頁碼
    private int totalno;
    
    public List<T> getDatas() {
        return datas;
    }
    public void setDatas(List<T> datas) {
        this.datas = datas;
    }
    public int getTotalsize() {
        return totalsize;
    }
    public void setTotalsize(int totalsize) {
        this.totalsize = totalsize;
    }
    public int getPageno() {
        return pageno;
    }
    public void setPageno(int pageno) {
        this.pageno = pageno;
    }
    public int getPagesize() {
        return pagesize;
    }
    public void setPagesize(int pagesize) {
        this.pagesize = pagesize;
    }
    public int getTotalno() {
        return totalno;
    }
    public void setTotalno(int totalno) {
        this.totalno = totalno;
    }
    @Override
    public String toString() {
        return "Page [datas=" + datas + ", totalsize=" + totalsize + ", pageno=" + pageno + ", pagesize=" + pagesize
                + ", totalno=" + totalno + ", getDatas()=" + getDatas() + ", getTotalsize()=" + getTotalsize()
                + ", getPageno()=" + getPageno() + ", getPagesize()=" + getPagesize() + ", getTotalno()=" + getTotalno()
                + ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString()
                + "]";
    }
    
}

 

關於我為什么要用GET獲取數據最大的原因是?

增刪改,對於數據庫通常是有操作的,既然是操作的話,我必須確保操作的安全性,使用POST是最好的,因為地址欄不會顯示對應的參數,和瀏覽器不會緩存。

而Get相反,如果用GET的話,對於增刪改,瀏覽器會有記錄,同時也會在地址欄上顯示。不利於安全。

這里的安全是非修改信息。

像增刪改對於數據庫而言是修改數據。

而查只是獲取數據,絲毫不影響數據一致性和完整性。

而且Get請求是可以緩存的,既然不影響數據的完整性和一致性,我通過GET請求獲取數據,瀏覽器可以緩存,這樣的話,確保用戶體驗和減輕服務器壓力,何嘗不好呢。

關於POST和GET,我建議大家可以參考這篇博客:https://www.cnblogs.com/williamjie/p/9099940.html

該博文對於GET和POST講的比較詳細可以作為參考。

 

另外關於上述的JSONObject,並不想引入阿里巴巴的,而是一個比較著名的開源項目Hutool。

這個項目的特點是,將Java開發常用的工具類整理並優化為一個maven依賴,這樣大家要用到它時,只需引入該依賴,就可以利用其封裝的工具類加快開發進度,提高效率。

Wiki地址:http://hutool.mydoc.io/ 這里主要是講工具類使用詳情,需要用到的朋友們,可以作為參考。

碼雲開源地址為:https://gitee.com/loolly/hutool

該項目應用到很多開源項目和一些知名企業。包括我現在公司也在用這個,很久之前開發習慣,一項將常用工具類放入自己某個項目中,需要是直接復制過來,甚至有的時候還需要重寫。

自從有了hutool,很少重寫,當然了,也不能光用,也要知道它的原理,因為它是開源的,所以我們可以深入的了解它的實現原理。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM