前段时间做项目过程中,碰到一个问题.有一个页面需要做级联式的提交,例如:输入查询条件,提交表单A.得到表单B,然后在根据表单B中check的勾选项,提交后得到清单C,在同一页面显示,问题是:在表单B提交之后,或者点击清单C分页查询时返回的页面都需要保留表单B中的状态,这里的处理的确会让人很头痛,于是最后决定在表单B的提交中使用Ajax,这样一来便无须担忧保留状态的问题了.
现将具体实现做成一个小示例发上来,希望能对初学者有所帮助,因为我本身也是个初学者,在网络也上得到了其他人的不少帮助.:P
ok,具体实现的流程如下:
1.由前端页面发送Ajax请求至服务器端.
function QueryList(no){
var url="getXML.do";
var pars="pageNo="+no;
var ajax=new Ajax.Request(url,{
method:'get',
parameters:pars,
onComplete:showResponse
});
//回调
function showResponse(request){
var parser=new MyXmlParser();
parser.load(request);
var dataList=parser.itemList;
var pageList=parser.pageList;
showTable(dataList,pageList);
}
这里用到的是prototype-1.4.0.js中的Ajax对象.
2.服务器端处理程序到数据库查询数据并生成xml档返回.
StringBuffer resultXML = new StringBuffer();
int pageNo = new Integer(request.getParameter("pageNo")).intValue();
try {
resultXML.append("<?xml version='1.0' encoding='gb2312'?>");
resultXML.append("<ajax-response>\n");
resultXML.append("<root>\n");
Pagination page = new Pagination(request, 100);
List list = this.getTestList(page.getStart(), page.getPageSize());
for (int i = 0; i < list.size(); i++) {
TestBean bean = (TestBean) list.get(i);
resultXML.append("<data>\n");
resultXML
.append("\t<id>" + bean.getId().toString() + "</id>\n");
resultXML.append("\t<name>" + bean.getName() + "</name>\n");
resultXML.append("\t<sex>" + bean.getSex() + "</sex>\n");
resultXML.append("\t<age>" + bean.getAge().toString()
+ "</age>\n");
resultXML.append("</data>\n");
}
resultXML.append("<pagination>\n");
resultXML.append("\t<total>" + page.getTotal() + "</total>\n");
resultXML.append("\t<start>" + page.getStart() + "</start>\n");
resultXML.append("\t<end>" + page.getEnd() + "</end>\n");
resultXML.append("\t<pageno>" + page.getPageNo() + "</pageno>\n");
resultXML.append("</pagination>\n");
resultXML.append("</root>\n");
resultXML.append("</ajax-response>");
} catch (Exception e) {
e.printStackTrace();
}
writeResponse(request, response, resultXML.toString());
3.在Ajax响应方法中对xml解析并生成表格显示到页面.
//显示数据
function showTable(dataList,pageList){
try{
//清单部分
var bodyPanel=$("bodyPanel");
var tab = document.createElement("table");
tab.className="datagrid";
tab.id="myTable";
bodyPanel.replaceChild(tab,bodyPanel.firstChild)
var headerrow = tab.insertRow(0);
createNode(headerrow,'th','header','id');
createNode(headerrow,'th','header','姓名');
createNode(headerrow,'th','header','职业');
createNode(headerrow,'th','header','工资');
for(var i=0;i<dataList.length;i++){
var row=tab.insertRow(i+1);
row.className="rows";
for(var j=0;j<4;j++){
var col=row.insertCell(j);
col.innerHTML=dataList[i][j];
}
}
//分页部分
var total=parseInt(pageList[0][0]);
var start=parseInt(pageList[0][1]);
var end=parseInt(pageList[0][2]);
var current=parseInt(pageList[0][3]);
var c1_HTML='显示 '+(1+start)+' 到 '+end+' 笔,共 '+total+' 笔';
var c2_HTML='';
if(start>0){
var prvNo=current-1;
c2_HTML+='<a href="javascript:QueryList('+prvNo+')">[上一页] </a>';
}else{
c2_HTML+='[上一页] ';
}
var totalPage=parseInt(total/10);
if(total%10!=0){
totalPage++;
};
for(var i=1; i <=totalPage; i++){
if(i == 2 && current-6 > 1){
c2_HTML+='...';
i = current- 6;
} else if(i == current + 6 && current +6<totalPage){
c2_HTML+='...';
i = totalPage - 1;
} else{
if(current==i){
c2_HTML+='['+current+'] ';
}else{
c2_HTML+='<a href="javascript:QueryList('+i+')">'+i+'</a>'+' ';
}
}
}
if(current<totalPage){
var nextNo=current+1;
c2_HTML+='<a href="javascript:QueryList('+nextNo+')">[下一页]</a>';
}else{
c2_HTML+='[下一页]';
}
var pagintion = document.createElement("table");
pagintion.className="footer";
var rightDiv=document.createElement('div');
rightDiv.setAttribute("align","right");
var row=pagintion.insertRow(0);
var col_1=row.insertCell(0);
var col_2=row.insertCell(1);
col_1.innerHTML=c1_HTML;
rightDiv.innerHTML=c2_HTML;
col_2.appendChild(rightDiv);
var footPanel=$("footPanel");
footPanel.replaceChild(pagintion,footPanel.firstChild);
}catch(e){
alert("error");
}
highlightTableRows("myTable");
}//end showTable
其中还有用到的分页对象Pagination ,及页面的xml解析对象MyXmlParser这里就不贴code出来了.附件中有Demo.war包和project文件.感兴趣的朋友可以下载来看看.
测试环境如下:
JDK:1.5
开发工具:Eclipse3.1
部署服务器:Tomcat5.5
分享到:
- 2007-05-04 19:31
- 浏览 4211
- 评论(1)
- 论坛回复 / 浏览 (0 / 13426)
- 查看更多
相关推荐
Ajax无刷新分页示例源码 程序介绍: 程序使用jquery方法提交请求,处理后将数据库绑定到页面中。 Ajax无刷新分页示例源码 程序介绍: 程序使用jquery方法提交请求,处理后将数据库绑定到页面中。 Ajax无...
总之,"JSP AJAX分页示例程序"是一个很好的学习资源,它展示了如何将JSP和AJAX技术相结合,实现动态、高效的分页效果。通过深入理解和实践这个示例,开发者可以更好地掌握服务器端编程和前端交互的技术,提升Web应用...
MVCPager+Razor方式ajax分页示例 自己写的
总的来说,JSP环境下的AJAX分页是一个涉及前端和后端交互的过程,通过JavaScript和服务器端的配合,实现了无刷新的分页效果,提高了用户的浏览效率。这个过程中,需要注意的是数据的安全性、效率以及前后端的通信...
功能基础,增,显,分页。适合初学者。 ajax+.net小例子 ajax+C#示例 ajax+.net 示例ajax+.net小例子 ajax+C#示例 ajax+.net 示例ajax+.net小例子 ajax+C#示例 ajax+.net 示例
【描述】提到的"Ajax分页查询完美示例.rar"可能包含了一个完整的项目源代码和数据库文件,用于演示如何结合Java后端和Ajax前端实现这一功能。重复的文件名可能表示压缩包内包含了不同版本或不同阶段的代码或数据。 ...
本示例主要讲解如何利用Ajax、JTemplate和JSON数据格式来实现一个简单的分页功能,无需刷新整个页面,仅更新所需的部分内容。 **Ajax基础** Ajax(Asynchronous JavaScript and XML)是一种在不重新加载整个网页的...
MvcPager分页示例MVC2.0源码 MvcPager分页示例MVC2.0 开发环境:VS2008SP1+MVC2.0+MSSQL2005 ASP.NET MvcPager 1.3版发布(2010-3-30) MvcPager分页控件是在ASP.NET MVC Web应用程序中实现分页功能的一系列扩展...
jQuery,一个轻量级、功能丰富的JavaScript库,结合AJAX(异步JavaScript和XML)技术,可以实现动态、高效的分页效果。本篇文章将深入探讨jQuery AJAX分页的原理与实践,通过具体的实例来展示如何实现炫酷的分页功能...
本示例主要探讨的是一个基于HTML和Ajax实现的简单实用分页模板,它利用Prototype JavaScript框架实现面向对象的设计。 **一、Prototype框架介绍** Prototype是JavaScript的一个开源库,它扩展了JavaScript语言,...
jQuery实现Ajax分页特效示例,可以设置上一页、下一页的文字,还可以设置每页显示条数,从第几条开始等,本代码为实现Ajax无刷新分页的功能演示,并不具备真正的分页,此代码只是实现了前端的ajax分布逻辑,后台需要...
这个“一个ajax分页的公共类”提供了一个通用的解决方案,可以被多个页面或项目复用,减少了重复代码,提高了开发效率。 1. **Ajax基础** Ajax的核心是通过JavaScript创建XMLHttpRequest对象,向服务器发送异步...
本示例将详细介绍如何利用这些技术实现一个分页功能。 首先,jQuery 是一个轻量级的 JavaScript 库,它简化了 HTML 文档遍历、事件处理、动画以及 Ajax 交互等任务。Ajax(异步JavaScript和XML)允许页面在不重新...
**Ajax分页技术详解** Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。在网页应用中,分页是一个常见的功能,用于处理大量数据的展示,它允许用户逐页...
本示例使用的是`SqlHelper`,一个简单但实用的数据库辅助类库,它提供了方便的SQL执行方法。首先,确保已经正确配置了数据库连接字符串,然后使用`SqlHelper`的`ExecuteReader`方法获取分页所需的数据。 ```csharp ...
在提供的“Paging”压缩包文件中,可能包含了实现这个Ajax分页示例的相关代码,包括控制器(Controllers)、视图(Views)、模型(Models)以及可能的配置文件。通过分析这些文件,你可以更深入地了解如何在实际项目...
这个"源代码-AJAX 静态分页示例.zip"文件显然包含了一个具体的AJAX静态分页实现的源代码,适用于ASP(Active Server Pages)环境。 首先,我们要理解静态分页的概念。静态分页通常指的是在服务器端预先计算好每一页...
在本示例中,"ASP源码—AJAX 静态分页示例.zip" 提供了一个使用ASP和AJAX技术实现静态分页功能的代码实例。这涉及到两个主要的技术领域:ASP和AJAX,它们在网页开发中都扮演着重要的角色。 1. ASP(Active Server ...
在“ajax分页demo”这个项目中,我们可以通过将压缩包“ajaxpage”解压并放入Tomcat服务器的webapps目录下,然后启动服务器来运行示例。访问http://localhost:8080/ajaxpage/,可以看到一个动态加载分页效果的实例。...