之前有过一篇关于分页的介绍,该篇在前篇基础上作了整理和扩展。主要改变在于:将代码分层,使逻辑更加清晰;增加了点击字段标题自动排序的功能;分页SQL改成了SQLSERVER2005专有的语句。
效果图如下:
如图,矩形部分可以认为是“form”标签的覆盖范围。每一次点击查询按钮、分页导航链接、标题栏或者“跳转”按钮的时候,都会引起三部分数据的提交(椭圆形勾勒处):
1. 各个查询参数。它们最终会被传递到DAO层用来拼凑分页SQL语句的where部分。
2. 当前页码信息。
3. 其他隐藏信息。包含了:
1)当前是否有“操作”列?这里用ID为“hasOperation”的hidden input来存放信息。设置这个参数用于决定:当点击第一列标题的时候,是否会引起页面的提交。
2)如果被点击了字段标题,是哪个字段按照何种方式排序?这里用ID为“orderParam”的hidden input来存放信息。格式为“要排序的列序号:排序方式”,比如按照第一列升序排列可以记为“1:asc” 。
表现层(JSP页面)的结构大致如下:
xml 代码
-
<html>
-
<head>
-
…
-
head>
-
<body onload=”tableSort(‘list’)”>
-
<html:form>
-
-
<c:out value=”${requestScope.pageBar}”>
-
<c:out value=”${requestScope.dataGrid}”>
-
html:form>
-
body>
- html>
使用EL输出的pageBar和dataGrid都是html代码组成的字符窜,下面阐述它是怎么生成的。
首先在业务逻辑层定义分页逻辑的基本接口:
java 代码
-
public interface PaginationService {
-
-
public String getPageBar();
-
-
public String getDataGrid();
-
-
public void execPagination();
-
-
public void translateParameters(Map parameters);
-
-
-
}
表现层将调用该接口,传递参数,执行分页,并将返回的结果传递到相应的JSP页面。
表现层可以将分页逻辑以及参数的处理放在一个基类中,供具体的分页实例继承,这在先前一篇已作过介绍。
下面说明排序是如何实现的:
在页面中body标签的onload事件将执行tableSort(“list”),其中的“list”是信息列表的ID.
这个函数会为每个标题栏(除了操作栏)“赋予”保存信息提交页面的功能。
该js函数代码如下:
js 代码
-
function tableSort(tableId){
-
this.table=document.getElementById(tableId);
-
this.thTags=this.table.getElementsByTagName("th");
-
this.colLen=this.thTags.length;
-
var i=0;
-
var hasOperation=document.getElementById("hasOperation").value;
-
if (hasOperation=="true")i=1;
-
for(;i<this.colLen;i++){
-
this.thTags[i].th=this.thTags;
-
this.thTags[i].onclick=function(){
-
if (this.className=="desc")
-
this.className="asc";
-
else if (this.className=="asc")
-
this.className="desc";
-
else this.className="asc";
-
var th=this.th;
-
var len=th.length;
-
for (var i=0;i
-
if (th[i]!=this)
-
th[i].className="none";
-
else
-
document.getElementById("orderParam").value=i+";"+this.className;
-
}
-
doQuery();
-
}
-
}
-
-
}
这里面用到了前面所提及的几个隐藏参数。由于根据th的className来判断排序方式,所以需要对样式做设置。在CSS文件中,对html数据表格的th进行样式定义:
css 代码
-
.rowTable th.desc{
-
background:#FFFFCC url("../images/desc.gif") no-repeat left center;
-
color:#333333;
-
cursor:pointer;
-
}
-
.rowTable th.asc{
-
background:#FFFFCC url("../images/asc.gif") no-repeat left center;
-
color:#333333;
-
cursor:pointer;
-
}
这里面对应了升序排序的小三角的图片,用于点击后变换。由此,用户点击标题栏,提交,在action当中分解参数orderParam的值,获取要排序的情况并获得排序字段,最后统一拼凑sql分页语句。
拼凑后的sql形如:
sql 代码
-
Select * FROM (select ROW_NUMBER() Over(order by SOME_COLUM desc) as rowId,* from V_SOME_VIEW where 1=1) as V_SOME_VIEW where rowId between 1 and 15
在接口PaginationService的实现类中,有专门函数分析当前的排序指令,输出相应的隐藏参数,以及操作列,数据列等等。
目前,该分页设计单机测试20万数据左右运行良好,速度较快,后继会对代码再作改进。
分享到:
相关推荐
带学员课上做的oracle模仿百度分页样式的例子。比较适合初学者参考,jdbc工具类是自己写的,没有使用第三方分页组件。...项目中的数据库链接串是:"jdbc:oracle:thin:@192.168.1.101:1522:jc", "sh", "sh
先说下 intersect和 ... 返回查询结果中相同的部分。 eg:各个部门中有哪些相同的工种 select job from account intersect select job from research intersect select job from sales ....................
分页的实现(Vue+Element)+输入框...<div class=sales-table> 订单列表 <div class=search-box><input type=text name= id= class=order-search-input placeholder=关键词 v-model='search'> <div class=t
本文实例讲述了C#基于数据库存储过程的AJAX分页实现方法。分享给大家供大家参考。具体如下: 首先我们在数据库(SQL Server)中声明定义存储过程 代码如下:use sales –指定数据库 if(exists(select * from ...
本文实例为大家分享了GridView的Bootstrap分页样式,供大家参考,具体内容如下 Revenue.cs收入类,包括实体模型和业务逻辑 public class Revenue { public Revenue(string country, string revenue, string ...
sales/sales:以销售人员角色登录,可以查看系统中订单信息并进行发货等操作 ?buyer/buyer:以采购人员角色登录,可以管理商品分类和商品信息 ?daxnet/daxnet:普通用户角色,不能对系统进行任何管理操作
25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211.2.2 将选择查询转换为生成表查询 25311.2.3 为新表建立关系 25411.2.4 使用新的tblShipAddresses表 25511.3 创建操作查询向一个表中追加记录 ...
25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211.2.2 将选择查询转换为生成表查询 25311.2.3 为新表建立关系 25411.2.4 使用新的tblShipAddresses表 25511.3 创建操作查询向一个表中追加记录 ...
24610.11 从其他数据库中的表创建查询 24710.12 疑难解答 24810.13 现实世界—优化多表查询 249第11章 用操作查询修改数据 25111.1 操作查询入门 25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211....
25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211.2.2 将选择查询转换为生成表查询 25311.2.3 为新表建立关系 25411.2.4 使用新的tblShipAddresses表 25511.3 创建操作查询向一个表中追加记录 ...
24610.11 从其他数据库中的表创建查询 24710.12 疑难解答 24810.13 现实世界—优化多表查询 249第11章 用操作查询修改数据 25111.1 操作查询入门 25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211....
24610.11 从其他数据库中的表创建查询 24710.12 疑难解答 24810.13 现实世界—优化多表查询 249第11章 用操作查询修改数据 25111.1 操作查询入门 25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211....
25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211.2.2 将选择查询转换为生成表查询 25311.2.3 为新表建立关系 25411.2.4 使用新的tblShipAddresses表 25511.3 创建操作查询向一个表中追加记录 ...
24610.11 从其他数据库中的表创建查询 24710.12 疑难解答 24810.13 现实世界—优化多表查询 249第11章 用操作查询修改数据 25111.1 操作查询入门 25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211....
24610.11 从其他数据库中的表创建查询 24710.12 疑难解答 24810.13 现实世界—优化多表查询 249第11章 用操作查询修改数据 25111.1 操作查询入门 25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211....
24610.11 从其他数据库中的表创建查询 24710.12 疑难解答 24810.13 现实世界—优化多表查询 249第11章 用操作查询修改数据 25111.1 操作查询入门 25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211....
24610.11 从其他数据库中的表创建查询 24710.12 疑难解答 24810.13 现实世界—优化多表查询 249第11章 用操作查询修改数据 25111.1 操作查询入门 25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211....
24610.11 从其他数据库中的表创建查询 24710.12 疑难解答 24810.13 现实世界—优化多表查询 249第11章 用操作查询修改数据 25111.1 操作查询入门 25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211....
24610.11 从其他数据库中的表创建查询 24710.12 疑难解答 24810.13 现实世界—优化多表查询 249第11章 用操作查询修改数据 25111.1 操作查询入门 25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211....
分页的交易查询已针对销售和采购中的最大链接进行了优化;分配客户付款或贷项通知单:即使关闭结算选项,仍显示折扣的全额分配付款,已固定;报表销售清单:固定报表中的重复行;修复了sales_order_db.inc中具有误导性...