分页组件几乎是一般网站都会涉及到的组件,网上有很多这样的插件,自己挑来跳去选择了这一款。

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

功能强大,可扩展性比较强,而且幕后的工程师一直在完善这个插件,不废话了,上干货。

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

1.JSP页面

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

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

引入一个css:

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

页面元素:

<div id="myPage" 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 ? $("#myPage").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') : '';
$("#sppage").page({
remote : {
url : '请求地址@RequestMapping',
pageIndexName : 'pageIndex', //请求参数,当前页数
pageSizeName : 'pageSize', //请求参数,每页数量
totalName : 'total', //指定返回数据的总数据量的字段名
params : {
cxtj : JSON2.stringify(cxtjobj),
},
callback : function(data, pageIndex) {
if (data.success) {
                    //-----在这里,你可以遍历你返回回来的值,遍历数据的方法,取决与你后台组织好,传递过来的数据结构-----
                    //1.返回Map 【data.key 就可以取到 value】如下:
fhxxlist = data.fhxxlist; //2.返回 List<Map<String,Object>> 或者 List,遍历方法如下:
$.each(fhxxlist, function(i, fhxx) {
});

} else
alert(data,error);
},
} //---------这里你可以编写响应三种不同的分页组件后需要处理的逻辑,也就是回调函数------------
            }).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);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;
}
												

web 前端常用组件【01】Pagination 分页的更多相关文章

  1. web 前端常用组件【05】ZTree

    web 项目或多或少都会有涉及到什么人员职称树,菜单树,组织机构树等. 历手三四个项目有大有小,采用的树前端都是 Ztree. 有些优秀的J2EE 框架将这些常用的组件都封装起来,作为模块化的组件提供 ...

  2. web 前端常用组件【06】Upload 控件

    因为有万恶的IE存在,所以当Web项目初始化并进入开发阶段时. 如果是项目经理,需要知道客户将会用什么浏览器来访问系统. 明确知道限定浏览器的情况下,你才能从容的让手下的封装必要的前端组件. 本篇文章 ...

  3. web 前端常用组件【04】Datetimepicker 和 Lodop

    web项目中日期选择器和打印这两个功能是非常常见,将使用过的日期和打印控件,在这里总结归纳,为方便后面使用. 1.Datetimepicker a.官方API:http://www.bootcss.c ...

  4. web 前端常用组件【07】弹出层 Layer

    web 项目中总是需要弹出框,来让用户进行下一步的操作. 大到弹出另外一个页面,小到弹出提示.确认等. 经手几个项目,还是感觉 Layer 用起来比较的轻松,你能想到的 Layer 都能帮你做到. 感 ...

  5. web 前端常用组件【03】Bootstrap Multiselect

    实际的项目网站中或多或少的或用到多选框,我选用的一款是 Bootstrap Multiselect. 官方文档:http://www.kuitao8.com/demo/20140224/1/boots ...

  6. web 前端常用组件【02】Select 下拉框

    <select id="hello"></select>   关于 select 支持的属性和响应事件,可以参照:http://www.runoob.com ...

  7. amazeui学习笔记--css(常用组件11)--分页Pagination

    amazeui学习笔记--css(常用组件11)--分页Pagination 一.总结 1.分页使用:还是ul包li的形式: 分页组件,<ul> / <ol> 添加 .am-p ...

  8. WEB前端常用网站收集

    WEB前端常用网站收集整理 w3school.w3schools 前端里.脚本之家.素材家园 17素材.frontopen NEC更好的CSS方案.一些常用的JS实例 Bootstrap  官网  h ...

  9. 整理部分JS 控件 WEB前端常用的做成Jsp项目,方便今后直接用

    整理部分JS 控件  WEB前端常用的做成Jsp项目,方便今后直接用 最近又没时间了,等用时间了,再加入更多的, 源码下载: http://download.csdn.net/detail/liang ...

随机推荐

  1. 数据库ORACLE中函数decode的用法

    Decode函数与一系列嵌套的 IF-THEN-ELSE语句相似 decode()函数简介: 使用方法: Select decode(columnname,值1,翻译值1,值2,翻译值2,...值n, ...

  2. == 与 equals 区别

          同: ==和equals都比较两个值是否相等.相等为true 否则为false:   异:      1. == 是一个运算符;equals则是string对象的方法,可以.(点)出来.  ...

  3. SAM4E单片机之旅——24、使用DSP库求向量数量积

    DSP(Digital Signal Processing,数字信号处理)中会使用大量的数学运算.Cortex-M4中,配置了一些强大的部件,以提高DSP能力.同时CMSIS提供了一个DSP库,提供了 ...

  4. 使用dig查询dns解析

    原文地址:使用dig查询dns解析 作者:chenwenming 一般来说linux下查询域名解析有两种选择,nslookup或者dig,而在使用上我觉得dig更加方便顺手. 如果是在debian下的 ...

  5. x01.Lab.StreetApp: MVVM

    Store App 特别适用于 MVVM 模式.由于要用到 SQLite,Bing Maps,所以第一步从网上搜索并安装这两个扩展.很难想象在智能手机上运行 SQL Server 这种巨无霸型数据库, ...

  6. JavaScript目录菜单滚动反显组件的实现

    JavaScript目录菜单滚动反显组件,有以下两个特点 每个导航菜单项(nav)对应页面一个内容区域(content) 滚动页面到特定内容区域(content)时,对应的菜单会自动切换,一般会添加一 ...

  7. Qt 怎么添加图片文件?

    1.新建一个.qrc的文件 2.起个.qrc的文件名 3.完成后,添加图片文件 4.如图 就好了.

  8. C# FTP 命令无法获取ServerU目录列表问题

    第一步:  使用C# 的Ftp功能时,发现了一个很奇怪的现象,获取目录列表的命令,在SeverU上面直接返回错误,而在windows自带的FTP上则正常,经过反复试验,终于发现,原来是ServerU默 ...

  9. CDN下nginx获取用户真实IP地址

    随着nginx的迅速崛起,越来越多公司将apache更换成nginx. 同时也越来越多人使用nginx作为负载均衡, 并且代理前面可能还加上了CDN加速,但是随之也遇到一个问题:nginx如何获取用户 ...

  10. 【原】常见CSS3属性对ios&android&winphone的支持

    2个月前,我在博文<webapp开发中兼容Android4.0以下版本的css hack>中写过“那对于做移动网页开发的同事来说,一般只要做好webkit内核浏览器的展现效果就行了” ,在 ...