JQuery 常用积累(二)Pagination 分页组件

官方Demo网址:http://mricle.com/JqueryPagination

分页组件几乎是一般网站都会涉及到的组件,网上有很多这样的插件,自己挑来跳去选择了这一款,功能强大,可扩展性比较强,而且幕后的工程师一直在完善这个插件,不废话了,上干货.

(模拟场景:商店网站,俺要根据用户选择的查询条件,来查询数据库,并展示到前台)

1.JSP页面:

如果你的web项目前台是基于bootstrap,js只需要引入2个js:

<r:script path="/style/js/JqueryPagination/jquery.pagination-1.2.4.js" />
<r:script path="/style/js/JqueryPagination/jquery.pagination-1.2.4.min.js" />

引入一个css:

<r:style path="/style/css/jquery.pagination.css" />

页面元素:

<div id="spbpage" class="m-pagination"></div>

2.JS:

a.组织要查询的商品的特征和限制条件,条件来自于页面用户输入或者是下拉框选择,组织为一个Object,类似与java 中的map;

var cxtj = {
        lx   : $("#splx").val(),     商品类型
        scrq : $("#spscrq").val(),   商品生产日期
        ys   : $("#spys").val(),     商品颜色
        cc   : $("#spcc").val(),     商品尺寸
        sccj   : $("#sccj").val()    生产厂家
    }; 

b.定义一个全局的变量count,因为我使用的时候,出现了个问题,当变更查询条件后,分页组件需要重新生成;

var count = 1;
count++;
count > 2 ? $("#cwbbpage").page(‘destroy‘) : ‘

c.前端总体代码如下:

具体的方法参数这里就不多言了,官方Demo 中写的比较详细

var count = 1;
function query() {  var cxtjobj = {
            lx   : $("#splx").val(),     商品类型
            scrq : $("#spscrq").val(),   商品生产日期
            ys   : $("#spys").val(),     商品颜色
            cc   : $("#spcc").val(),     商品尺寸
            sccj   : $("#sccj").val()    生产厂家
        };
    count++; //count 计数的作用,为当第二次以后点击请求时,需要先销毁分页组件;
    count > 2 ? $("#sppage").page(‘destroy‘) : ‘‘;
    JqueryPagination(‘15‘);
    $("#sppage").page({
        remote : {
            url : ‘xxxxxx后台ajax 请求类地址@RequestMapping‘,
            pageIndexName : ‘pageIndex‘, //请求参数,当前页数,索引从0开始
            pageSizeName : ‘pageSize‘, //请求参数,每页数量
            totalName : ‘total‘, //指定返回数据的总数据量的字段名
            params : {
                cxtj : JSON2.stringify(cxtjobj),
            },
            callback : function(data, pageIndex) {
                if (data.success) {
                    //在这里,你可以遍历你返回回来的值,遍历数据的方法,取决与你后台组织好,传递过来的数据结构
                    //返回Map ,data.key 就可以取到 value
                    fhxxlist = data.fhxxlist;

                    //返回 List<Map<String,Object>> 或者 List
                    $.each(fhxxlist, function(i, fhxx) {
                    });
                } else {
                    hideLoading();
                    showAlert($(".container-fluid"), "提示:", data.error, "warring", true);
                }
            },
        }    //这里你可以编写响应三种不同的分页组件后需要处理的逻辑,也就是回调函数
            }).on("pageClicked", function (event, pageIndex) {
                 $("#eventLog").append(‘EventName = pageClicked , pageIndex = ‘ + pageIndex + ‘<br />‘);
             }).on(‘jumpClicked‘, function (event, pageIndex) {
                 $("#eventLog").append(‘EventName = jumpClicked , pageIndex = ‘ + pageIndex + ‘<br />‘);
             }).on(‘pageSizeChanged‘, function (event, pageSize) {
                 $("#eventLog").append(‘EventName = pageSizeChanged , pageSize = ‘ + pageSize + ‘<br />‘);
             });
}

3.后台java类进行处理的两个公共方法:

a.分页组件传递一个 pagesize 和 pageindex ,需要返回datas 和 total;

b.1)方法根据 countsql 查询出来的总条数, pageindex 来计算出总共需要多少页,并返回一个二维数组,没有用List是因为我觉得,二维数据已经够用了;

2)方法将计算出来的二维数组,根据请求的 pageindex ,取出一个开始到结束的区间,并且在这个区间里面查询需要展示到前台的数据集合,返回给前台;

c.前台页面,每触发一次事件(pageClick,jumpClick,pageSizeChange)或者变更查询条件,都会请求一次后台,返回特定的数据集合;

d.不同的地方是(pageClick,jumpClick,pageSizeChange)事件,始终是一个分页组件,而变更查询条件会销毁原来的组件,重新初始化;

    /**
      * 描述:根据 countsql 查询出来的总条数, pageindex 来计算出总共需要多少页
      */
    public int[][] getPagearray(int total,int pagesize){
        int page = (total%pagesize == 0 ? total/pagesize:total/pagesize + 1);
        logger.info("total ====" + total + " pagesize===" + pagesize + " page====" + page);
        int[][] pagearray = new int[page][pagesize];
        int j = 1;
        for(int i = 0;i<page;i++){
           for (int k = 0;k<pagesize;k++){
               pagearray[i][k] = j;
               j++;
           }
        }
        return pagearray;
    }

    /**
      * 描述:根据请求的 pageindex ,取出一个开始到结束的区间,并且在这个区间里面查询需要展示到前台的数据集合,返回给前台
      */
    public Map<String,Object> createPagination(String countsql,String cxxxsql,String retname,int pageSize,int pageIndex){
        Map <String,Object> result = new HashMap<String,Object>();
        List<Map<String, Object>> countlist;
        try {
            countlist = selecter.select2list(countsql);
            int count = Integer.parseInt(countlist.get(0).get("count").toString());
          if(count == 0){
                 result.put("error", "没有查询到信息,请变更查询条件!");
                 result.put("total", 0);
             }else{
              int[][] pagearray = getPagearray(count,pageSize);
                    String jtxxsql = "SELECT * " +
                          "  FROM (SELECT P.*, ROWNUM RID " +
                          "          FROM (" + cxxxsql + ") P) " +
                          " WHERE RID BETWEEN "+ pagearray[pageIndex][0] +" AND "+ pagearray[pageIndex][pageSize - 1] ;
                 List<Map<String,Object>> cxxxlist = selecter.select2list(jtxxsql);
                 result.put("success",true);
                 result.put("total",count);
                 result.put("data", pagearray[pageIndex]);
                 result.put(retname, cxxxlist);
            }
        } catch (DataOptException e) {
            e.printStackTrace();
        }
        return result;
    }    
				
时间: 2024-10-13 13:17:22

JQuery 常用积累(二)Pagination 分页组件的相关文章

第二百零九节,jQuery EasyUI,Pagination(分页)组件

jQuery EasyUI,Pagination(分页)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Pagination(分页)组件的使用方法,这个组件依赖于 LinkButton(按钮)组件.

JQuery 常用积累(六)ZTree

Web 项目或多或少都会有涉及到什么人员职称树,菜单树,组织机构树...... 历手三四个项目有大有小,采用的树前端都是 Ztree. 有些优秀的J2EE 框架将这些常用的组件都封装起来,作为模块化的组件提供给前端,这样固然是好,开发效率会提升几倍. 客户需求是什么,组件化往上一套,几分钟就能搭建起来. 但这样咱程序员真的就是搬砖的了,纯纯的重复性工作. 1. Ztree 主要的特点 ZTree v3.0 将核心代码按照功能进行了分割,不需要的代码可以不用加载 采用了 延迟加载 技术,上万节点轻

Jquery 常用笔记 (二)

此系列博客主要是记录常用到的Jquery的功能,如果有不正确的地方请大家指教,后续部分不定时更新(zouw) 3.内容操作 示例: <p id="test">这是段落中的<b>粗体</b>文本</p><input type="text" id="name" value="米老鼠"></p><button id="btn1">

EasyUI - pagination 分页组件

总页数是手动填写,后续进行更改……………… 效果: html代码: <!--使用标签创建--> <%--<div id="pp" class="easyui-pagination" data-options="total:2000,pageSize:10" style="background: #efefef; border: 1px solid #ccc;"></div>--%>

JQuery 常用积累(三)Select 下拉框

<select id="hello"></select> 1.jQuery获取Select选择的Text和Value: 语法解释: $("#select_id").change(function(){//code...}); //为Select添加事件,当选择其中一项时触发 var checkIndex=$("#select_id ").get(0).selectedIndex; //获取Select选择的索引值 var

jquery常用代码--(二)

3.进度条       1.横向进度条带固定百分比               function SetProgress(progress) {                                 if (progress) {                              $(".inner").css("width", String(progress) + "%"); //控制#loading div宽度       

JQuery 常用积累(五)Datetimepicker和Lodop

web项目中日期选择器和打印这两个功能是非常常见,将项目中使用的日期选择器和打印控件,在这里总结归纳,为方便后面使用. 1.Datetimepicker a.官方API:http://www.bootcss.com/p/bootstrap-datetimepicker/ 里面有详细的Datetimepicker介绍,包括支持的方法.设置的选项.事件..... b.项目集成Datetimepicker实例:    这是一款依赖与bootsrap样式的控件,所以你项目中需要引入的js如下: <scr

Angular4.+ ngx-bootstrap Pagination 自定义分页组件

Angular4 随笔(二)  --自定义分页组件 1.简介 本组件主要是实现了分页组件显示功能,通过使用 ngx-bootstrap Pagination分页组件实现. 基本逻辑: 1.创建一个分页组件,如:ng g component  pager 2.父组件调用子组件,并向子组件传入基础配置信息 3.分页组件接收父组件传参,并在模板上进行配置,在html模板上定义点击事件,调用分页子组件自身一个方法 4.分页组件定义发射器,当页码发生变化时,发射通知 5.父组件模板调用分页组件处,监听分页

基于Vue封装分页组件

使用Vue做双向绑定的时候,可能经常会用到分页功能 接下来我们来封装一个分页组件 先定义样式文件 pagination.css ul, li { margin: 0px; padding: 0px;} .page-bar { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-sel