列可进行配置和自定义渲染方法.
需要prototype.js和一个HashMap的js实现,在JSP中用
//分页的公有方法
function render(parmetersName,tableName,url)
{
var parmeters = "name="+$(parmetersName).value;
var grid = new Grid(tableName,url,parmeters);
grid.render();}
//存放页面grid的HashMap
var gridmap = new HashMap();
//页面表格类
var Grid = Class.create();
Grid.prototype = {initialize:function(tableName,url,parmeter)
{
//表格的ID
this.tableName = tableName;
//获取数据的URL
this.url = url;
//查询参数
this.parmeter = parmeter;
//记录分页的信息
this.page = new PageEntity();
gridmap.put(this.tableName,this);
},
getData:function()
{
var tempParmeter = this.parmeter + "¤tPage=" + this.page.getCurrentPage()+"&pageSize="+this.page.getPageSize();
var myAjax = new Ajax.Request(this.url,{method: 'post', parameters: tempParmeter, onSuccess:function(originalRequest){
var data = new Data(eval(originalRequest.responseText),myAjax.tableName,myAjax.pageEntity);
data.render();
},
onFailure:function(originalRequest){alert("获取数据出错!请重试!");}});
myAjax.tableName = this.tableName;
myAjax.pageEntity = this.page;
},
render:function()
{
//先得到数据,后清除表格.在响应快的情况下.可以导致数据错误.因为表格还未清除完,而数据开始render.
//本机测试.没有出现异常
this.getData();
this.clear();
},
//清除表格内容
clear:function()
{
var oTable = $(this.tableName);
var oRows = oTable.rows;
for(var i=oRows.length-1;i>0;i--)
{
oTable.deleteRow(i);
}
}
};
//解析返回的数据,生成表格
function Data(data,tableName,page)
{
this.tableName = tableName;
//TD映射字符串数组
this.mapping = new Array();
//存放解析返回的数据与映射,生成的表格数据
this.dataArray = new Array();
//服务器返回的数据
this.data = data;
//TD的自定义render
this.renderFu = new HashMap();
this.page = page;
this.render = function()
{
var tb = $(this.tableName);
var childRows = tb.rows;
var childCells = childRows[0].cells;
for(var i=0; i<childCells.length; i++) {
this.mapping.push(childCells[i].mapping);
if(childCells[i].render)
{
this.renderFu.put(childCells[i].mapping,childCells[i].render);
}
}
this.parseData();
this.addData();
this.addPage();
};
this.parseData=function()
{
var count = this.data[0];
this.page.init(count.totalCount,this.page.pageSize);
var dataList = count.List;
for(var i=0;i<dataList.length;i++)
{
var temp = dataList[i];
var hash=new HashMap();
for(var j=0;j<this.mapping.length;j++)
{
var virable = this.mapping[j];
hash.put(virable,eval("temp."+virable));
}
this.dataArray.push(hash);
}
};
this.addData=function()
{
var oTable = $(this.tableName);
for(var i=0;i<this.dataArray.length;i++)
{
var hashData = this.dataArray[i];
var oRow=oTable.insertRow(oTable.rows.length);
oRow.onmouseover =function(){
this.bgColor='#e5edf7';
};
oRow.onmouseout=function(){
this.bgColor='#FFFFFF';
};
for(var j=0;j<this.mapping.length;j++)
{
var oCell=oRow.insertCell();
if(this.renderFu.get(this.mapping[j]))
{
var fu = this.renderFu.get(this.mapping[j])+"('"+hashData.get(this.mapping[j])+"')";
oCell.innerHTML=eval(fu);
}
else
{
oCell.innerText=hashData.get(this.mapping[j]);
}
oCell.className="table_table";
}
}
};
this.addPage = function()
{
var oTable = $(this.tableName);
var oRow = oTable.insertRow(oTable.rows.length);
var oCell = oRow.insertCell();
oCell.colSpan = this.mapping.length;
oCell.className = "table_page";
oCell.innerHTML = this.page.buildHTML(this.tableName);
};
}
//分页信息类
function PageEntity()
{
this.totalRows = 0; // 记录总数
this.totalPages = 0; // 总页数
this.pageSize = 20; // 每页显示数据条数,默认为10条记录
this.currentPage = 1; // 当前页数
this.endPage = 1; // 结束页数
this.hasPrevious = false; // 是否有上一页
this.hasNext = false; // 是否有下一页
this.buildHTML = function(tableName)
{
var html = "";
html += "每页显示"+this.pageSize+"条 共"+this.totalRows+"条/共"+this.totalPages+"页 ";
if(this.currentPage!=1)
{
html += " <a href='#' onclick=\"return submitPageQuery(1,'"+tableName+"')\">首页</a>";
}
if(this.currentPage!=1&&this.hasPrevious)
{
html += " <a href='#' onclick=\"return submitPageQuery("+(parseInt(this.currentPage)-1)+",'"+tableName+"')\">上一页</a>";
}
if(this.currentPage!=this.totalPages&&this.hasNext)
{
html += " <a href='#' onclick=\"return submitPageQuery("+(parseInt(this.currentPage)+1)+",'"+tableName+"')\">下一页</a>";
}
if(this.currentPage!=this.totalPages&&this.totalPages!=0)
{
html += " <a href='#' onclick=\"return submitPageQuery("+this.endPage+",'"+tableName+"')\">尾页</a>";
}
if(this.totalPages!=0)
{
html += " 跳转到<select name='select' class='input' id='select' onchange=\"return submitPageQuery(this.value,'"+tableName+"')\">";
for(var i=1;i<=this.totalPages;i++)
{
if(this.currentPage==i)
{
html += "<option value='"+i+"' selected>"+i+"</option>";
}
else
{
html += "<option value='"+i+"'>"+i+"</option>";
}
}
}
return html;
};
this.init = function(totalRows,pageSize)
{
this.totalRows = totalRows;
this.pageSize = pageSize;
this.totalPages = ((parseInt(this.totalRows) + parseInt(this.pageSize)) - 1) / parseInt(this.pageSize);
this.totalPages = parseInt(this.totalPages);
this.setEndPage(totalRows, pageSize);
this.refresh(); // 刷新当前页面信息
};
this.setEndPage = function(totalRows,pageSize) {
var pageNumber = totalRows / pageSize;
pageNumber = parseInt(pageNumber);
var pageRemainder = totalRows % pageSize;
if (pageRemainder > 0) {
this.endPage = pageNumber + 1;
} else {
this.endPage = pageNumber;
}
};
this.getCurrentPage = function()
{
return this.currentPage;
};
this.setCurrentPage = function(currentPage)
{
this.currentPage = currentPage;
this.refresh();
};
this.getPageSize = function()
{
return this.pageSize;
};
this.setPageSize = function(pageSize) {
this.pageSize = pageSize;
this.refresh();
};
this.getTotalPages = function()
{
return this.totalPages;
};
this.setTotalPages = function(totalPages) {
this.totalPages = totalPages;
this.refresh();
};
this.getTotalRows = function()
{
return this.totalRows;
};
this.setTotalRows = function(totalRows) {
this.totalRows = totalRows;
this.refresh();
};
this.first = function()
{
this.currentPage = 1;
this.setHasPrevious(false);
this.refresh();
};
this.previous = function()
{
this.currentPage--;
this.refresh();
};
this.next = function()
{
if (this.currentPage < this.totalPages) {
this.currentPage++;
}
this.refresh();
};
this.last = function()
{
this.currentPage = this.totalPages;
this.setHasNext(false);
this.refresh();
};
this.isHasNext = function()
{
return this.hasNext;
};
this.setHasNext = function(hasNext) {
this.hasNext = hasNext;
};
this.isHasPrevious = function()
{
return this.hasPrevious;
};
this.setHasPrevious =function(hasPrevious)
{
this.hasPrevious = hasPrevious;
};
this.refresh = function()
{
if (this.totalPages <= 1) {
this.hasPrevious = false;
this.hasNext = false;
} else if (this.currentPage == 1) {
this.hasPrevious = false;
this.hasNext = true;
} else if (this.currentPage == this.totalPages) {
this.hasPrevious = true;
this.hasNext = false;
} else {
this.hasPrevious = true;
this.hasNext = true;
}
};
this.getEndPage = function()
{
return this.endPage;
}
}
分享到:
相关推荐
在Web开发中,分页是一种常见的数据展示方式,尤其在处理大量数据时,能够提高用户体验,避免一次性加载过多内容导致页面加载缓慢。本实例中,我们将深入探讨如何利用jQuery、AJAX以及Spring MVC框架实现一个简单的...
**jQuery AJAX 分页详解** 在Web开发中,为了提高用户体验,我们经常需要处理大量数据时实现分页功能。jQuery作为一个轻量级、功能强大的JavaScript库,提供了与服务器...希望本文能帮助你理解和实施jQuery AJAX分页。
在网页应用中,分页是一个常见的功能,它用于处理大量数据,提高用户体验,避免一次性加载过多内容导致页面卡顿。在本章中,我们将深入探讨如何使用Ajax实现动态分页。 一、Ajax基础 1. XMLHttpRequest对象:Ajax...
**省略号分页**通常指的是当页面无法一次性展示所有分页链接时,使用省略号来表示中间的页面,比如“1...5 6 7...20”。这种设计既节省了空间,又保持了用户体验的连续性。 实现这一功能的基本步骤如下: 1. **...
在Web开发中,分页是一种常见的用户界面设计,它能够帮助用户更有效地浏览大量数据,而不会一次性加载所有内容导致页面加载缓慢或资源消耗过大。在这个项目中,我们将会探讨以下几个关键知识点: 1. **JSP(Java...
- 在`Page_Load`事件中,首先尝试从查询字符串中获取当前页码,若不存在则默认为第一页。 - 使用异常处理来确保字符串到整数的转换安全无误。 3. **构建查询语句**: - 根据请求参数动态构建SQL查询语句,这允许...
在处理大量数据时,如论坛、电商网站的商品列表等,分页是必不可少的功能,它能让用户逐页浏览内容,而不是一次性加载所有数据导致页面加载速度变慢或消耗过多流量。 **一、Ajax分页的基本原理** Ajax分页的核心是...
在网页开发中,数据的展示往往需要分页处理,尤其是当数据量较大时,分页可以提高用户体验,避免一次性加载过多内容导致页面响应慢。AJAX(Asynchronous JavaScript and XML)和jQuery是实现动态分页的常用技术。这...
在网页开发中,分页是一种常见的用户界面设计,它允许用户逐步浏览大量数据,而无需一次性加载所有内容,从而提高页面加载速度和用户体验。本文将详细介绍如何使用Ajax技术实现分页功能,特别是在Oracle数据库背景下...
一、Ajax分页原理 Ajax(Asynchronous JavaScript and XML)技术允许我们在不刷新整个页面的情况下,通过JavaScript与服务器进行异步数据交换。在分页场景中,用户点击分页按钮时,Ajax发送请求到服务器获取对应...
在网页应用中,分页是一个常见的功能,用于处理大量数据的展示,它允许用户逐页浏览内容,而不会一次性加载所有数据导致页面响应慢或者消耗大量网络资源。Ajax分页结合了这两者的优势,使得用户在浏览长列表时能有...
在网页开发中,分页是一种常见的数据展示方式,它能够帮助用户有条理地浏览大量信息,而...在实际项目中,可以结合现有的前端框架如Vue.js或React.js,利用它们提供的组件化和状态管理功能,进一步简化Ajax分页的实现。
在网页设计中,分页是一种常见的用户界面元素,它允许用户浏览大量数据时,按页浏览,而不是一次性加载所有内容,从而提高网页性能和用户体验。jQueryPager插件就是为了解决这个问题而设计的。 在jQueryPager的实现...
在分页场景中,Ajax能够帮助我们仅请求和加载当前需要的数据,避免一次性加载大量数据导致页面加载缓慢。 ### 2. Ajax分页原理 Ajax分页的基本思想是:用户点击分页按钮时,通过Ajax发送请求到服务器,服务器返回...
当数据量过大时,一次性加载所有内容可能会使页面加载速度变慢,甚至导致浏览器卡顿。无刷新分页通过Ajax技术实现了分页效果,用户只需点击分页链接,后台将请求发送到服务器,服务器则返回对应分页的数据,这些数据...
在传统的网页分页中,用户每点击一次分页按钮,整个页面都会重新加载,这可能导致页面滚动位置丢失以及较长的等待时间。 **实现无刷新分页的关键步骤:** 1. **创建XMLHttpRequest对象**:这是Ajax的核心,用于在...
分页功能是当数据量很大,一次性展示在页面上会造成性能问题时使用的。它允许用户通过页码进行翻页操作,每次只加载显示当前页的数据。分页对于提高页面加载速度和减少内存占用非常有帮助。 本篇文章中,通过实现...
在网页开发中,分页是一种常见的用户界面设计技术,它用于处理大量的数据,避免一次性加载过多内容导致页面响应变慢。Ajax 和 jQuery 的结合在实现动态分页时扮演了重要角色,尤其在处理Web应用程序中的大数据集时。...
此jQuery插件为Ajax分页插件,一次性加载,故分页切换时无刷新与延迟,如果数据量较大不建议用此方法,因为加载会比较慢。 三、前台代码部分 var pageSize =6; //每页显示多少条记录 var total; //总共多少记录 ...