zoukankan      html  css  js  c++  java
  • 企业级分页(包含自动导出EXCEL)

    本人写的这个分页是建立在公司的框架上,公司框架对分页的数据封装成了PageResult

    package com.infoservice.po3.bean;
    
    import java.util.List;
    
    public class PageResult<T>
      implements DataBean
    {
      private int curPage = 1;
    
      private int pageSize = 20;
    
      private int totalPages = 0;
    
      private int totalRecords = 0;
    
      private List<T> records = null;
    
      public int getCurPage()
      {
        return this.curPage;
      }
    
      public void setCurPage(int curPage)
      {
        this.curPage = curPage;
      }
    
      public int getPageSize()
      {
        return this.pageSize;
      }
    
      public void setPageSize(int pageSize)
      {
        this.pageSize = pageSize;
      }
    
      public int getTotalPages()
      {
        return this.totalPages;
      }
    
      public void setTotalPages(int totalPages)
      {
        this.totalPages = totalPages;
      }
    
      public int getTotalRecords()
      {
        return this.totalRecords;
      }
    
      public void setTotalRecords(int totalRecords)
      {
        this.totalRecords = totalRecords;
      }
    
      public List<T> getRecords()
      {
        return this.records;
      }
    
      public void setRecords(List<T> records)
      {
        this.records = records;
      }
    
      public String toString() {
        StringBuilder sbd = new StringBuilder();
        sbd.append("PageResult@");
        sbd.append(hashCode());
        sbd.append("[PSize=" + this.pageSize + "; ");
        sbd.append("TPSize=" + this.totalPages + "; ");
        sbd.append("TRSize=" + this.totalRecords + "; ");
        sbd.append("CPage=" + this.curPage + "; ");
        if (this.records.size() > 0) {
          sbd.append("Class=" + this.records.get(0).getClass());
        }
        sbd.append("]");
        return sbd.toString();
      }
    }

    查询出分页数据以后转化成json格式的数据,通过自己定义的分页脚本处理结果 : lkl_pageSplitPlugin.js

     /**
     * 分页组件
     * author:Liaokailin
     * email:284888279@qq.com
     */
    
    function genePageSplitDate(){
                // 初始化数据
                var curPage = ps.curPage==null||ps.curPage=='undefined'||ps.curPage==0?1:ps.curPage ;// 当前页数 
                var pageSize = ps.pageSize==null||ps.pageSize=='undefined'?15:ps.pageSize ;//每页显示记录数
                var pageCount = ps.totalPages==null||ps.totalPages=='undefined'?0:ps.totalPages ;// 总页数
                var totalRecords = ps.totalRecords==null||ps.totalRecords=='undefined'?0:ps.totalRecords ; // 总记录数
                var jsonData = ps.records ;  //总记录
                $("#pageSplit").text("") ;
                //title提示
                   var table = $("<table border='1' width='99%' id='pageSplitTitle'  class='table_list' style='border-bottom:1px solid #DAE0EE' />");
                var tr = $("<tr style='background-color:#DAE0EE' id='showTitle'  />");
                var td = $("<td nowrap='nowrap' align='left' />");
                var hiddenBut = title==null?"":title ;
                //var hiddenBut = title==null?"":title+"<img src='images/uup.png' id='hiddenBut' style='z-index: 5px'>&nbsp;&nbsp;";
                td.html(hiddenBut) ;
                td.appendTo(tr);
                tr.appendTo(table);        
                table.appendTo($("#pageSplit"));
                if (columns != 'undefined' && columns && columns.length > 0) {
                    var table = $("<table border='1' width='99%' id='pageSplitData' class='table_list_01' style='border-bottom:1px solid #DAE0EE' />");
                    var tr = $("<tr style='background-color:#DAE0EE'  />");
                    //处理表头
                    for (var i = 0; i < columns.length; i++) {
                        
                        if(columns[i]["sortable"]!=null&&columns[i]["sortable"]!="undefined"&&columns[i]["sortable"]==true){
                          var td = $("<td   id='sortable_"+columns[i]["dataIndex"]+"' onclick='sortAbleColumns(\""+columns[i]["dataIndex"]+"\")'/>");
                        }else{
                          var td = $("<td id='header'/>");
                        }
                        td.text(columns[i]["header"]==null?"":columns[i]["header"]);
                    //    var div = $("<span id='seleteItem' style='display:none' onmouseover='showImg(this)' onmouseout='hiddenImg(this)' />") ;
                    //    div.html("&nbsp;&nbsp;&nbsp;<img src='images/dn.png' />") ;
                    //    div.appendTo(td) ;
                        td.appendTo(tr);
                    }
                    tr.appendTo(table);
                    //处理数据
                if(jsonData&&jsonData.length>0){
                    for (var i = 0 ;i<jsonData.length ;i++){
                         var tr = $("<tr />");
                            for (var j = 0; j < columns.length; j++) {
                                var td = $("<td />");
                                if(columns[j]["header"]=="序号"){
                                    var index  ;
                                    if(curPage==1){
                                       index = i+1 ;
                                    }else{
                                       index = parseInt(curPage - 1) * pageSize + i+1;
                                    }
                                    td.text(index) ;
                                }else{
                                    var cellData ;
                                    if(jsonData[i][columns[j]["dataIndex"]]==null||jsonData[i][columns[j]["dataIndex"]]=='undefined'){
                                       cellData = "" ;
                                    }else{
                                       cellData =jsonData[i][columns[j]["dataIndex"]] ;
                                    }
                                    if(columns[j]["renderer"]!='undefined'){
                                        if(typeof(columns[j]["renderer"])=='function'){
                                             var dataArray = {};
                                            dataArray.data = jsonData[i];
                                            cellData = columns[j].renderer(cellData, {}, dataArray); 
                                        }
                                       td.html(cellData);
                                    }else{
                                      td.text(cellData);
                                    }
                                }
                                if(columns[j]["align"]!='undefined'){
                                  td.attr("align",columns[j]["align"]) ;
                                }else{
                                    td.attr("align","center") ;
                                }
                                td.appendTo(tr);
                            }
                          tr.appendTo(table);
                    // alert(jsonData[i]["loc"]) ;
                    }
                }else{
                  var tr = $("<tr/>"); 
                  var td = $("<td colspan="+columns.length+" align='center'/>"); 
                   td.text("没有满足条件的数据!!!") ;
                   td.appendTo(tr);
                   tr.appendTo(table);
                }
                    
                    table.appendTo($("#pageSplit"));
                    
                    
                    //生成分页条码
                    var table = $("<table border='1' width='99%'  class='table_query'  id='pageSplitNavi'/>"); 
                    var tr = $("<tr/>");
                    var td = $("<td/>");
                    var navi="第<font color='red'>"+curPage+"</font>页/共"+pageCount+"页&nbsp;" ;
                    var pageSizeArray = [15,20,50,100,200,500] ;
                    navi=navi+"每页显示<select name='pageSize' id='pageSizeSelect' onchange='__extQuery__(this.value)' >" ;
                    for(var i = 0 ;i<pageSizeArray.length ;i++){
                      if(pageSize==pageSizeArray[i]){
                      navi = navi + "<option value="+curPage+"_"+pageSizeArray[i]+" selected='selected'>"+pageSizeArray[i]+"</option>" ;
                      }else{
                      navi = navi + "<option value="+curPage+"_"+pageSizeArray[i]+">"+pageSizeArray[i]+"</option>" ;
                      }
                    }
                    navi=navi+"</select>条&nbsp;" ;
                    navi = navi+"共"+totalRecords+"条记录" ;
                    //navi=navi+"每页显示<select name='pageSize'><option value=15>15</option><option value=30>30</option><option value=50>50</option><option value=100>100</option><option value=200>200</option><option value=500>500</option></select>"
                    if(curPage<=1){
                       navi = navi+geneButton("首页",null)+geneButton("上一页",null) ;
                    }else{
                       navi = navi+geneButton("首页",1)+geneButton("上一页",curPage-1) ;
                    }
                    
                    var startIndex; 
                    var endIndex ;
                    if(pageCount<=10){
                       startIndex = 1 ;
                       endIndex = pageCount ;
                    }else{//总页数大于10的时候显示当前页附近的10个页码,这里设置为左边4右边5
                      startIndex = curPage-4 ;
                      endIndex = curPage+5 ;
                      //前面不足4则显示前10页
                      if(startIndex<1){
                          startIndex = 1 ;
                          endIndex = 10 ;
                      }
                      //后面不足5则显示后10页
                      else if(endIndex>pageCount){
                        endIndex = pageCount ;
                        startIndex = endIndex-10 + 1 ;
                      } 
                    }
                    
                    for (var i=startIndex ; i<=endIndex ;i++){
                        navi = navi+geneButton(i,i) ;
                    }
                    if(curPage>=pageCount){
                       navi = navi+geneButton("下一页",null)+geneButton("尾页",null) ;
                    }else{
                        navi = navi+geneButton("下一页",curPage+1)+geneButton("尾页",pageCount) ;
                    }
                    
                    navi=navi+"&nbsp;<input type='text' id='newPage'  value="+curPage+" name='newPage' class='mini_txt' />&nbsp;<input type='button' value='GO'  id='goButton'   class='normal_btn'/>"
                    td.html(navi) ;
                    td.appendTo(tr);
                    tr.appendTo(table);
                    table.appendTo($("#pageSplit"));
                    
                    //控制颜色  
                    $("table tr:nth-child(2n+3)").css("background-color", "#f3f3f3");
                    //鼠标事件
                    $("table tr:nth-child(2n)").mousemove(function(){
                       $(this).css("background-color", "#DAE0EE") ;
                    }).mouseout(function(){
                       $(this).css("background-color", "#ffffff") ;
                    });
                    //绑定按钮单击事件
    //                $("#hiddenBut").bind('click', function() {
    //                    if (this.src.indexOf("uup.png") == -1) {
    //                        $("#pageSplitData,#pageSplitNavi").slideToggle("slow");
    //                        this.src = "images/uup.png";
    //                    } else {
    //                        $("#pageSplitData,#pageSplitNavi").slideToggle("slow");
    //                        this.src = "images/ddn.png";
    //                    }
    //                });
                    
                      $("#showTitle").bind('click', function() {
                            $("#pageSplitData,#pageSplitNavi").slideToggle("fast");
                    });
                    
                    $("#goButton").bind('click', function() {
                        if(pageCount==0){
                           $(this).attr("disabled",true) ;
                           return ;
                         }
                         var pageIndex = $("input[name='newPage']").val() ;
                         if(!isNaN(pageIndex)&&parseInt(pageIndex)>=1&&parseInt(pageIndex)<=pageCount){
                              __extQuery__(pageIndex) ;
                         }else{
                           alert("请输入正确的页码!!!") ;
                           $("input[name='newPage']").val(curPage) ;
                         }
                         
                    });
                    
                 
            
                }
                
    }
    
       function sortAbleColumns(data){
             if(sortable=='undefined'){
              alert("排序出错,联系管理员指定排序标识!!!") ;           
              return ;
             }
             
             if(sortable==null){
               sortable = "" ;
             }
               //var img = $("<img src='images/uup.png' style='z-index: 5px' />");
              //alert($("#sortable_"+data+"").html()) ;
              //$("#sortable_"+data+"").text($("#sortable_"+data+"").html()+"<img src='images/uup.png' style='z-index: 5px' />") ;
              //$("#sortable_"+data+"").html($("#sortable_"+data+"").html()+"hello") ;
             if(sortable.indexOf(data)!=-1){  //表示存在,降序
                 var temp = data ;
               data = data + " desc " ; 
               
              
           //   this.text(this.text()+"hello") ;
            sortable = sortable.removeStr(temp) ; //替换json
             }else{ //不存在,升序
                sortable  = sortable + data;
                data = data + " asc " ;
         }
             //alert(sortable) ;
             var splitParam = ps.curPage+"_"+ps.pageSize ;
             
             __extQuery__(splitParam,data) ;
       }
    
       function geneButton(buttonValue,pageIndex){
          var but = "&nbsp;<input type='button' class='normal_btn' value="+buttonValue+" " ;
          if(pageIndex==null){
              but = but+" disabled='disabled' " ;
          } else{
               if(ps.curPage == pageIndex){
                 but = but+"  onclick='__extQuery__("+pageIndex+") ;' style='border-color: red' " ;
              } else{
                 but = but+" onclick='__extQuery__("+pageIndex+") ;' " ;
              } 
          }
          but = but +"/>" ;
          return but ;
       }
     
     /**
      * 查询
       */
    function __extQuery__(page,sort){
        //验证表单操作
             var urlValue ;
             if(isNaN(page)){   
                 var pageArray = page.split("_") ;
                 //处理修改pageSize以后计算得到总页数如果小于当前页,则将当前页置为该总页数
                if(parseInt((parseInt(ps.totalRecords+parseInt(pageArray[1]))-1)/pageArray[1])<pageArray[0]){  
                   pageArray[0] = parseInt((parseInt(ps.totalRecords+parseInt(pageArray[1]))-1)/pageArray[1]) ;
                }// 
                    if(sort!='undefined'&&sort!=null){
                    urlValue = url+(url.lastIndexOf("?") == -1?"?":"&")+"curPage="+pageArray[0]+"&pageSize="+pageArray[1]+"&sortColumn="+sort+"&ts="+new Date().getTime()  ;                    
                    }else{
                    urlValue = url+(url.lastIndexOf("?") == -1?"?":"&")+"curPage="+pageArray[0]+"&pageSize="+pageArray[1]+"&ts="+new Date().getTime()  ;
                    }
                }else{
                        var pageS  ;
                        if(ps==null||ps==""){
                            pageS = 15 ;
                        }else{
                           pageS = ps.pageSize ;
                        }
    //                    urlValue = url+(url.lastIndexOf("?") == -1?"?":"&")+"curPage="+page+"&ts="+new Date().getTime() ;
                         urlValue = url+(url.lastIndexOf("?") == -1?"?":"&")+"curPage="+page+"&pageSize="+pageS+"&ts="+new Date().getTime()  ;
                }
        //获取表单参数
            var para = getFormPara($("form[name=fm]"));
            //alert(para["dname"]) ;
         $.ajax({
                url : urlValue ,
                data : para,
                async : false,
                dataType : "json",
                success : function(data) {
                    //alert(data) ;
                    ps = data.ps;
                    genePageSplitDate() ;
                    }
                });
    }
    
    
    
    /**
     * 导出excel
     */
    function _exportDataToExcel_(flag){
       $(this).attr("disabled",true) ;
       var urlValue ; 
       var pageS  ;
       if (ps == null || ps == "") {
            pageS = 15;
        } else {
            pageS = ps.pageSize;
        }
        if (flag == 1) { // 导出当前页数据
    //        var reg = /json/g ;
    //        url = url.replace(reg,"do") ; //替换json
          urlValue = url+(url.lastIndexOf("?") == -1?"?":"&")+"curPage="+ps.curPage+"&pageSize="+pageS+"&exportFlag=exportFlag&ts="+new Date().getTime()  ;
       }else if(flag==2){//导出所有数据  excle2003最大容量65536
             urlValue = url+(url.lastIndexOf("?") == -1?"?":"&")+"curPage="+1+"&pageSize="+65536+"&exportFlag=exportFlag&ts="+new Date().getTime()  ;
       }
         //处理columns数据
       var columnsValue  ;
           for (var j = 0; j < columns.length; j++) {
               if(columns[j]["isExport"]=="yes"){
                 columnsValue = columnsValue+columns[j]["header"]+","+columns[j]["dataIndex"]+";" ;               
               }
           }
       //    alert(columnsValue) ;
       //获取表单参数
        var para = getFormPara($("form[name=fm]"));
        var fm = $("form[name=fm]") ;
        //var hid = $("<input/>") ;
        var hid = $("<input type='hidden' name='columns' value='"+columnsValue+"' />") ;
        //hid.attr("type","hidden").attr("value",columnsValue).attr("name","columns") ;
        hid.appendTo(fm)  ;
        //var hidden = $("input type='hidden' value='"+columnsValue+"' id='columns'") ;
        //value= urlValue+"&columns="+columnsValue+""  ;
        fm.attr("action",urlValue) ;
        //fm.attr("mothod","post") ;
        fm.submit() ;
        //fm.action = urlValue;
        //alert(urlValue) ;
        //fm.method="post" ;
    //     $.ajax({
    //            url : urlValue ,
    //            data : para,
    //            async : false,
    //            dataType : "json",
    //            success : function(data) {
    //            if("error"==data.result){
    //               alert("数据导出失败,请与管理员联系") ;
    //            }else{
    //               alert("数据导出成功!位于:"+data.result+"") ;
    //            }
    //            
    //             }
    //        });
    //   
    }
    
    
       
       
    /**
     * 将表单中各域的值自动封装成参数对象
     */
    function getFormPara(oFrm, obj){
         
        oFrm = $(oFrm)[0];
        var len = oFrm.elements.length;
        var ret;
        if (obj && obj instanceof Object) {
            ret = obj;
        }
        else {
            ret = {};
        }
        for (var i = 0; i < len; i++) {
            var oEle = oFrm.elements[i];
            // alert(oEle.type) ;
            if (oEle.type === "radio") {
                if (oEle.checked) {
                    ret[oEle.name] = oEle.value.trim();
                }
            }
            else if (oEle.type === "checkbox") {
                var curVal = ret[oEle.name];
                if (curVal === undefined) {
                    ret[oEle.name] = [];
                }
                if (oEle.checked) {
                    ret[oEle.name].push(oEle.value.trim());
                }
            }
             //遇到要操作的type可以自己手动添加 ,不要直接使用else
             else if(oEle.type === "text"||oEle.type ==="select-one" ||oEle.type ==="select-multiple" ){ 
            // else if(oEle.type === "button"){
                 ret[oEle.name] = oEle.value;
            }
        }
    //    if(columns!=null){
    //       ret["columns"] = columns ;
    //    }
    //    
        return ret;
    }
    
     
    String.prototype.trim = function(){
        return this.replace(/(^\s*)|(\s*$)/g, "");
    };
    /**
     * 删除字符串操作 
     * author : Liaokailin
     * @param {} str
     */
    String.prototype.removeStr = function(str){
        if(str!=null&&str!=""){
            var index = this.indexOf(str) ;
            if(index!=-1){
                if(index==0){
                  return  this.substring(str.length,this.length) ;
                }else if(index==this.length){
                    return this.substring(0,index) ;
                }
                else{
                  return this.substr(0,index)+this.substr(index+str.length,this.length) ;
                }
            }else{
              alert("没有指定的子串") ;
              return this ;
            }
        }else{
          alert("不能删除空串!") ;
          return this ;
        }
    };
    
     
     

    jsp页面处理起来就简单多了:不管是查询什么字段只要给定一个columns :例如:

      <div id="pageSplit" style="z-index: 10px" ></div>
      </center>
      <script type="text/javascript">
        var title ="廖凯林分页数据测试【样式待修改】" ;
        var ps ;  
        var sortable ; //排序标识
        var url = "<%=request.getContextPath() %>/jquery/JqueryPractice7Action/queryUserOrder.json?query=1"  ;
        var columns = [
                    {header: "序号",align:'center',isExport:"no"},  //获取序号不再需要renderer:getIndex ,只需指定header: "序号" ;
                    {header: "USER_ID", dataIndex:'USER_ID', align:'center',renderer:mySelect,isExport:"yes",sortable:true},
                    {header: "NAME",dataIndex: 'USER_NAME', align:'center',isExport:"yes",sortable:true},                
                    {header: "RNAME",dataIndex: 'REAL_NAME', align:'center',isExport:"yes",sortable:true},                
                    {header: "操作", dataIndex: 'VIN',renderer:operateLink}    
                  ];
                  
       function mySelect(value,metaDate,record){
           return value ;
        }
        
        function operateLink(value,meta,record){
           return "<a href='#' onclick='alert(\"修改\")' >修改</a>&nbsp;<a href='#' onclick='alert(\"删除\")' >删除</a>" ;
         } 
         __extQuery__(1) ;
      </script>

    最后就是导出excel了,在页面添加两个按钮:

      <td style="background-image: "><input type="button"  value="查询" class="normal_btn" onclick="__extQuery__(1);"/>
              <input type="button" id="exportCurrPageData"   value="导出当前页数据" class="normal_btn"  onclick="_exportDataToExcel_(1)"/>
              <input type="button" id="exprotAllData"   value="导出所有数据" class="normal_btn"  onclick="_exportDataToExcel_(2)"/>
             </td>
  • 相关阅读:
    JAVA中循环删除list中元素的方法总结
    弹力设计总结
    CPU飚高问题排查基本步骤
    缓存数据库更新策略
    .Module高内聚低耦合的思考
    javascript回调函数及推论
    Laravel Autoloader模块分析
    Laravel Event模块分析
    数据操作分层设计
    Discuzx2开发标准流程
  • 原文地址:https://www.cnblogs.com/liaokailin/p/2983061.html
Copyright © 2011-2022 走看看