- 浏览: 292862 次
- 性别:
- 来自: 昆明
文章分类
最新评论
-
wwangchenyu:
这个工具相当牛逼,太好用了~
Dash:程序员的的好帮手 -
woshi555bin:
...
原创:基于Prototype,利用Canvas绘图实现的web流程图设计器(原型) -
cosmo1987:
赞
Dash:程序员的的好帮手 -
jofy1004:
很强大的工具
Dash:程序员的的好帮手 -
riseliang:
高大上!高大上!高大上!
Dash:程序员的的好帮手
AJAX表格分页模板:探讨基于Prototype框架的javascript面向对象设计(上)
AJAX表格分页模板:探讨基于Prototype框架的javascript面向对象设计(中)
AJAX表格分页模板:探讨基于Prototype框架的javascript面向对象设计(下)
AJAX表格分页模板:探讨基于Prototype框架的javascript面向对象设计(中)
AJAX表格分页模板:探讨基于Prototype框架的javascript面向对象设计(下)
在前面的三篇文章中,我们循序渐进的完成了三种数据获取方式的表格分页模板,接下来让我们看一下服务器端代码设计。这里出于快速演示的目的,实用 groovy脚本简单实现,日后完全可以替换为别的实现,groovy的快速开发能力,非常适合用来快速展示脑海里的实现,呵呵。
首先,在mysql中建立一个名为“template”的数据库,再库中创建一个数据表trs,结构图如下(注意如果你设置了不同的用户名和密码,记得在下面的groovy代码里面做相应修改)。在这里我输入了19行测试数据:
接下来,针对静态分页模板,也就是一次获取所有分页数据的模板,我们编写一个StaticTemplate.groovy脚本文件,这里使用了groovy servlet:
另外,针对动态获取每页数据的分页模板,对应为AsyncTemplate.groovy脚本:
一些解释和技巧:
由于groovy语法简洁易懂,这里就不全盘解释了,就一些技巧说明一下,如果有兴趣,可以到groovy的官方网站查看相应的教程:http://groovy.codehaus.org/
1、groovy servlet相比servlet,简化了不少,你可以直接使用绑定对象,比如request、response等,而且,分号和变量声明前的“def”关键字是可选的;
2、引入groovy.sql.Sql类后,可以用Sql.newInstance静态方法返回数据库连接对象(可以指定相应的配置参数,如地址、用户名密码等),之后可以利用groovy提供的一系列方便实用的数据获取方法以及闭包,进行日常数据库操作:
另外,有个技巧可以让我们免于用if语句判断调用方法的对象是否为空,即使db为空,也不会抛出异常,呵呵:
3、三引号内部的字符串,会按原始格式输出,不需要对特殊字符做转义。而且,和双引号字符串一样,可以使用Gstring变量来动态占位,输出的时候将会把这些占位符替换为实际的变量值,与表达式语言类似:
4、利用groovy提供的MarkupBuilder,可以很方便的动态构建xml树结构。下面的代码迭代查询结果集的每一行,构建了一个分页数据内容(即tbody元素的tr子节点集):
最后,说一下前面我们设计的js对象的调用方式。在页面中,要显示一个分页表格,只需要指定一个容器div就可以了,比如,页面上有一个id为“TMPwrap”的div,我们可以这样来实例化分页模板对象,并显示它:
这样就生成并显示了一个静态分页模板实例,这里的template变量起这个名字,是由于动态分页模板的服务器返回javascript片段中用了这个名字,耦合得比较严重。可以这么改进,将服务器返回的片段代码改为一个函数,客户端eval之后,返回总页数即可:
ok,到这里,ajax表格分页模板示例就告一段落了,最后附上源码供大家参考,见附件。我的环境是:jdk5,tomcat5.5,mysql5.0。 将附件中的Template.war放入tomcat安装目录下的webapps文件夹里,即可通过http: //127.0.0.1/Template/template.htm访问到。
忘记说一个ie的bug:在生成提示信息的时候,我们通过动态生成一个跨列的单元格来实现,这里有个地方要注意,对于firefox,设置td.colspan = 100就可以了(一般不会有超过100列的表格,所以这个数目足够了),但是对于IE,貌似是区分大小写的,非得这样写才能达到相同的效果,奇怪:td.colSpan = 100。
预告一下,接下来,会有一篇文章讲解一种用很取巧但不是非常实用的方法,来达到静态的分页效果,特别之处在于,它不需要任何的javascript代码,呵呵,算是奇巧淫技了(ps:不要误会这个词语,不信你可以去翻翻辞典,呵呵)。
首先,在mysql中建立一个名为“template”的数据库,再库中创建一个数据表trs,结构图如下(注意如果你设置了不同的用户名和密码,记得在下面的groovy代码里面做相应修改)。在这里我输入了19行测试数据:
id |
int(10) |
title1 |
VARCHAR(45) |
title2 | VARCHAR(45) |
title3 | VARCHAR(45) |
title4 | VARCHAR(45) |
title5 | VARCHAR(45) |
title6 |
VARCHAR(45) |
xml 代码
- import groovy.sql.Sql
- response.setContentType 'text/html'
- response.setCharacterEncoding 'utf-8'
- db = Sql.newInstance(
- 'jdbc:mysql://localhost/template',
- 'root',
- 'admin',
- 'com.mysql.jdbc.Driver'
- )
- def trs = []
- db.eachRow("select * from trs"){tr->
- def writer = new StringWriter()
- def builder = new groovy.xml.MarkupBuilder(writer)
- builder.tr{
- td tr.title1
- td tr.title2
- td tr.title3
- td tr.title4
- td tr.title5
- td tr.title6
- }
- trs += writer.toString()
- }
- db?.close();
- mode = request.getParameter("mode")
- items = Integer.parseInt(request.getParameter("items"))
- out.println "<table id='pages'>"
- out.println """
- <caption>静态分页模板</caption>
- <thead>
- <tr>
- <th>标题一</th>
- <th>标题二</th>
- <th>标题三</th>
- <th>标题四</th>
- <th>标题五</th>
- <th>标题六</th>
- </tr>
- </thead>
- """
- for(String tr in trs){
- def index = trs.indexOf(tr)
- if(index%items==0){
- out.println "<tbody class='hidden'>"
- }
- out.println tr
- if(index%items==items-1||index==trs.size()-1){
- out.println "</tbody>"
- }
- }
- out.println "</table>"
另外,针对动态获取每页数据的分页模板,对应为AsyncTemplate.groovy脚本:
xml 代码
- import groovy.sql.Sql
- response.setCharacterEncoding 'utf-8'
- mode = request.getParameter("mode")
- items = Integer.parseInt(request.getParameter("items"))
- def db = Sql.newInstance(
- 'jdbc:mysql://localhost/template',
- 'root',
- 'admin',
- 'com.mysql.jdbc.Driver'
- )
- def start = 1
- if(mode=="page"){
- page = Integer.parseInt(request.getParameter("page"))
- if(page > 1){
- start = (page-1)*items + 1
- }
- }
- def end = start + items - 1
- def pageContent = []
- db.eachRow("select * from trs where id between ${start} and ${end}"){tr->
- def writer = new StringWriter()
- def builder = new groovy.xml.MarkupBuilder(writer)
- builder.tr{
- td tr.title1
- td tr.title2
- td tr.title3
- td tr.title4
- td tr.title5
- td tr.title6
- }
- pageContent += writer.toString()
- }
- if(mode=="async"){
- def trTotal = db.firstRow("select count(*) as total from trs").total
- if(trTotal<items){
- items = trTotal
- }
- pageTotal = trTotal%items!=0?trTotal.intdiv(items)+1:trTotal.intdiv(items)
- response.setContentType 'text/html'
- out.println "<table id='pages'>"
- out.println """
- <caption>异步分页模板</caption>
- <thead>
- <tr>
- <th>标题一</th>
- <th>标题二</th>
- <th>标题三</th>
- <th>标题四</th>
- <th>标题五</th>
- <th>标题六</th>
- </tr>
- </thead>
- """
- out.println "<tbody id='default'>"
- out.println pageContent.join("")
- out.println """
- </tbody>
- <tbody id="swap" class="hidden">
- </tbody>
- </table>
- <script type="text/javascript">
- template.pageTotal = $pageTotal;
- </script>
- """
- }
- else{
- response.setContentType 'text/xml'
- int page = Integer.parseInt(request.getParameter("page"))
- out.println """<tbody>"""
- out.println pageContent.join("")
- out.println """</tbody>"""
- }
- db?.close();
一些解释和技巧:
由于groovy语法简洁易懂,这里就不全盘解释了,就一些技巧说明一下,如果有兴趣,可以到groovy的官方网站查看相应的教程:http://groovy.codehaus.org/
1、groovy servlet相比servlet,简化了不少,你可以直接使用绑定对象,比如request、response等,而且,分号和变量声明前的“def”关键字是可选的;
2、引入groovy.sql.Sql类后,可以用Sql.newInstance静态方法返回数据库连接对象(可以指定相应的配置参数,如地址、用户名密码等),之后可以利用groovy提供的一系列方便实用的数据获取方法以及闭包,进行日常数据库操作:
java 代码
- import groovy.sql.Sql
- def db = Sql.newInstance(
- 'jdbc:mysql://localhost/template',
- 'root',
- 'admin',
- 'com.mysql.jdbc.Driver'
- )
java 代码
- db?.close()
3、三引号内部的字符串,会按原始格式输出,不需要对特殊字符做转义。而且,和双引号字符串一样,可以使用Gstring变量来动态占位,输出的时候将会把这些占位符替换为实际的变量值,与表达式语言类似:
java 代码
- "select * from trs where id between ${start} and ${end}" // ${变量名}即为占位替换符号
4、利用groovy提供的MarkupBuilder,可以很方便的动态构建xml树结构。下面的代码迭代查询结果集的每一行,构建了一个分页数据内容(即tbody元素的tr子节点集):
java 代码
- db.eachRow("select * from trs where id between ${start} and ${end}"){tr->
- def writer = new StringWriter()
- def builder = new groovy.xml.MarkupBuilder(writer)
- builder.tr{
- td tr.title1
- td tr.title2
- td tr.title3
- td tr.title4
- td tr.title5
- td tr.title6
- }
- pageContent += writer.toString()
- }
最后,说一下前面我们设计的js对象的调用方式。在页面中,要显示一个分页表格,只需要指定一个容器div就可以了,比如,页面上有一个id为“TMPwrap”的div,我们可以这样来实例化分页模板对象,并显示它:
js 代码
- var template = new Tbi.StaticTemplate("TMPwrap",4,"StaticTemplate.groovy");
- template.show();
js 代码
- function getTotal(){
- var total = $pageTotal;
- return total;
- }
ok,到这里,ajax表格分页模板示例就告一段落了,最后附上源码供大家参考,见附件。我的环境是:jdk5,tomcat5.5,mysql5.0。 将附件中的Template.war放入tomcat安装目录下的webapps文件夹里,即可通过http: //127.0.0.1/Template/template.htm访问到。
忘记说一个ie的bug:在生成提示信息的时候,我们通过动态生成一个跨列的单元格来实现,这里有个地方要注意,对于firefox,设置td.colspan = 100就可以了(一般不会有超过100列的表格,所以这个数目足够了),但是对于IE,貌似是区分大小写的,非得这样写才能达到相同的效果,奇怪:td.colSpan = 100。
预告一下,接下来,会有一篇文章讲解一种用很取巧但不是非常实用的方法,来达到静态的分页效果,特别之处在于,它不需要任何的javascript代码,呵呵,算是奇巧淫技了(ps:不要误会这个词语,不信你可以去翻翻辞典,呵呵)。
- Template.rar (2.5 MB)
- 描述: 示例代码
- 下载次数: 1468
评论
5 楼
chq32
2007-06-07
里面有文档吗,
没有的话,也打包上传吧,
没有的话,也打包上传吧,
4 楼
笨笨狗
2007-05-31
zjwlzwq 写道
这个下载下来,按照你的方法进行安装,等显示页面后,点击显示没有反映
首先,确保你的数据库表建立成功,而且已经有了测试数据在里面。你可以装个firefox,用firebug插件看看服务器返回的响应数据是否正确。
没有class是正常的,为了快速演示,我直接使用groovy servlet脚本编写,是不需要编译成.class的。
我想可能就是数据库的问题,检查一下表是否成功创建,还有数据库的用户名密码等,这个可以在groovy脚本里面直接修改保存即可。
3 楼
zjwlzwq
2007-05-31
Template.rar这个包里怎么没有.class文件?
2 楼
zjwlzwq
2007-05-31
请楼主指教
1 楼
zjwlzwq
2007-05-31
这个下载下来,按照你的方法进行安装,等显示页面后,点击显示没有反映
发表评论
-
Javascript数组类型检测:编写更强壮的isArray函数
2009-01-19 13:17 11503在日常开发中,我们经 ... -
我看《Ajax企业级开发》
2008-12-03 15:55 3741Ajax从2005年 ... -
原创:基于Prototype,利用Canvas绘图实现的web流程图设计器(原型)
2008-04-16 10:18 15863刚才在首页看到这么个 ... -
发布一个基于Prototype和Canvas实现的仿Google导航条
2008-04-15 11:42 11191前几天在一个叫做友财 ... -
Prototype1.6以下Element.setStyle()的bug
2007-12-01 11:40 2192问题:如果在frame、iframe页面中使用了setStyl ... -
最值得期待的好书:《Pro CSS and HTML Design Patterns》
2007-05-28 17:24 9477没事上Apress的网站闲逛,偶然发现这本新书 ... -
AJAX表格分页模板:探讨基于Prototype框架的javascript面向对象设计(下)
2007-05-18 13:10 11531AJAX表格分页模板:探讨基于Prototype框架的java ... -
为aptana增加firefox预览tab
2007-05-17 14:09 6635一直以来,aptana都是我首选的AJAX前台 ... -
AJAX表格分页模板:探讨基于Prototype框架的javascript面向对象设计(中)
2007-05-16 12:31 13014在上一篇文 ... -
AJAX表格分页模板:探讨基于Prototype框架的javascript面向对象设计(上)
2007-05-14 19:16 12453数据分页显示,是很普遍的需求,传统的实现大多是 ... -
我看《javascript dom编程艺术(dom scripting)》
2007-01-31 02:49 2855这本书在刚出版的时候,编辑就送了一本给我,可惜那段时间出差在外 ... -
腾讯,我无言了
2007-03-14 10:11 2226今天看到一个python群公告上显示有新的文章,好奇点进去想到 ... -
初学者的良师益友——写在《Ajax与Java高级程序设计》出版之际
2007-03-29 02:22 1948最近有朋友向我询问如 ...
相关推荐
jQuery作为一个广泛使用的JavaScript库,提供了丰富的插件来帮助开发者实现各种功能,包括表格分页。本篇文章将深入探讨jQuery插件在实现表格分页中的应用及其相关知识点。 一、jQuery和表格分页基础 1. jQuery...
火龙果软件工程技术中心 数据分页显示,是很普遍的需求,传统的实现大多是基于服务器端导航的,这种设计采用同步方式进行数据传输,用户体验很差。下面是我在学习ajax的过程中,实现的一个解决方案,不知道设计得...
2. **服务器端处理**:在ASP文件中,接收来自AJAX请求的参数(如当前页码、每页记录数等),然后查询数据库并计算出对应页的数据。这部分需要编写SQL查询语句,如`SELECT * FROM table LIMIT start, limit`,其中...
这种功能通过JavaScript或jQuery实现,可能涉及事件监听、DOM操作以及Ajax异步请求,以获取和更新服务器端的数据。 接下来,我们讨论分页功能。在处理大量数据时,分页是必不可少的,它能防止页面过长,提高加载...
下面将详细解释这些技术及其在分页和表格展示中的应用,以及如何实现loading效果。 1. PHP:PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,主要用于服务器端编程。它可以让开发者轻松地处理HTTP请求...
在JavaScript中,可以使用数组切片或者服务器端的分页API来实现。 在实际应用中,"jstable"可能是这个分页表格组件的名称,它可能包含了以下部分: 1. HTML模板:定义表格结构和分页元素。 2. CSS样式:定义表格和...
7. **服务器端操作**:AJAX可以轻松地与服务器端脚本(如PHP、Python、Node.js等)集成,执行复杂的计算或验证,然后将结果返回给前端表格。 8. **性能优化**:为了优化性能,通常会使用JSON格式来传输数据,因为它...
"JSP数据库数据AJAX无刷新分页"是一个常见的技术实现,它结合了JavaServer Pages(JSP)、数据库技术、Ajax(Asynchronous JavaScript and XML)以及前端分页组件,为用户提供了一种无需整个页面刷新即可获取并显示...
在本项目中,我们主要关注的是使用layui和nicePage.js实现JSON数据的自动表格分页。layui是一款轻量级的前端UI框架,提供了一系列丰富的组件,包括表格、按钮、表单等,适用于快速构建简洁、直观、强大的网页界面。...
3. **Thymeleaf**:Thymeleaf是一个现代的服务器端模板引擎,用于生成HTML。在分页场景中,Thymeleaf可以接收服务器返回的分页数据,并动态地渲染页面,显示当前页的内容以及分页导航。 4. **SpringBoot集成**:...
- **数据分片**:为了提高性能,应确保数据在服务器端进行分片处理,只加载当前页所需的数据,而非整个数据集。 - **缓存策略**:对于频繁访问的数据,可以考虑使用缓存技术减少数据库访问次数。 - **异步加载**:...
服务器端分页:在服务器上处理分页,适合数据量较小或对性能要求不高的情况。 客户端分页:在客户端JavaScript中处理分页,适用于大量数据和对性能要求较高的场景。 十、总结 "GridView分页系列"是一个全面探讨如何...
本篇文章将深入探讨如何结合Vue和DataTables实现服务器端分页的实例。 首先,我们要理解服务器端分页的概念。与客户端分页不同,服务器端分页在服务器上执行数据过滤、排序和分页逻辑,而不是在浏览器端。这样做...
在ASP.NET中,分页通常通过服务器端控件如GridView、ListView或DataPager来实现。以下将详细讲解ASP.NET分页的核心概念和技术: 1. **GridView控件**:GridView是最常用的展示数据的控件之一,它内建了分页功能。只...
这主要通过使用JavaScript库(MicrosoftAjax.js)和服务器端的ASP.NET AJAX扩展来实现。 GridView控件是ASP.NET中的一个核心组件,用于显示和操作表格数据。它能够自动绑定到各种数据源,如SQL数据库、XML文件或...
这可能涉及到JavaScript/jQuery前端分页,或者自定义服务器端分页控件。例如,可以创建一个自定义User Control,结合AJAX实现异步分页,提供更好的用户体验。 5. 高级分页功能: - 排序和筛选:结合SortExpression...
综上所述,结合ASP.NET的服务器端能力与jQuery的客户端优势,我们可以有效地处理不规则表格,提供灵活、高性能的用户界面。在实际项目中,应根据具体需求选择合适的技术组合,确保代码的可维护性和性能。
6. **分页逻辑**:在服务器端,我们需要计算总页数,根据当前页码和每页记录数截取数据。可以使用各种ORM框架,如Entity Framework,配合SQL查询来实现。 下面是一个简单的实现步骤: 1. **创建控制器方法**:在你...
在数据表格应用中,Ajax的核心作用是实现数据的动态加载和更新。当用户滚动、搜索或过滤数据时,Ajax可以向后台发送请求,获取新的数据片段,从而提高用户体验。 "datagrid"通常指的是数据网格控件,它是Web应用中...