2007-04-02
ECSide FAQ 之 :展现列表(分页)、排序、过滤的问题
关键字: ecside eXtremeComponents
最近很多人都问我关于ecside展现列表、排序、过滤相关的问题:
例如 "如何基于数据库操作" "为什么排序不好用" "为什么排序只是当前页" "为什么过滤只是当前页" 等等.
在这里我想通过该帖一并回答.如有说的不明白或者不对的地方欢迎大家回帖讨论.
首先ecside展现列表、排序、过滤(该三种操作以下简称为 RSF )的实现原理完全和原版EC一样,
如果你对原版EC的retrieveRowsCallback、sortRowsCallback、filterRowsCallback 非常熟悉,那么可以忽略此文.
先来简单介绍一下RSF操作方式.
ecside支持两种RSF方式: 基于java collection层 和 基于数据库层,下面分别介绍:
一:基于java collection层:
这是ec的默认实现方式, 最简单易用.
你要做的就是将整个列表所要展现的全部数据放入collection 内,并交给EC来处理.
其中RSF操作,全部由EC在内存中完成,由于你已经将全部数据放入了collection中,
所以排序 过滤都是基于全部数据的.
你要在DAO中做的就是一个 查询操作,SQL语句中不需要加入 关于排序 分页 过滤的代码.
这种方式的优点非常明显:实现简单.
缺点同样明显,而且在很大程度上是致命的: 数据量大的时候速度慢,而且很可能outofmemery.
这时候我们就需要第二种方式了:
二:基于数据库层:
在这种方式下,EC的角色发生了一点点变化.
此时,EC负责把 collection 里的内容展现出来, 同时会向你提供RSF相关的参数.
而这些参数需要你自己手动取得 并传入到DAO中(当然EC提供了很多方便的方法来帮助你取得这些参数),
具体功能的实现需要你自己在DAO中组织相应的SQL语句
这种方式的优缺点正好和方式一相反.
两种基本的实现方式介绍完了,下面讲一下实现:
大家可以看一下 ecside.properties 文件中的下列内容
其中 ProcessRowsCallback 采用了方式一 ,LimitCallback采用了方式二
而table.retrieveRowsCallback.default会告诉EC你默认使用的是哪个.
同样你也可以在 ec:table 标签里 指定
大家可能还看到了 org.ecside.table.callback.CommonLimitCallback 这个是我自己随意组合出来的一个rowcallback
他在执行分页的时候,使用了方式二,而排序 过滤的时候使用了方式一
所以,大家可能会发现,DEMO中的排序 过滤方法只对当前页有效.
我这么做其实是一种偷懒的方式,但多数情况下,正如网友所说"只排当页数据毫无意义",你们说的没错,的确如此:)
我会在新版本的DEMO中提供两种方式的完整的实例,还请大家耐心等待
例如 "如何基于数据库操作" "为什么排序不好用" "为什么排序只是当前页" "为什么过滤只是当前页" 等等.
在这里我想通过该帖一并回答.如有说的不明白或者不对的地方欢迎大家回帖讨论.
首先ecside展现列表、排序、过滤(该三种操作以下简称为 RSF )的实现原理完全和原版EC一样,
如果你对原版EC的retrieveRowsCallback、sortRowsCallback、filterRowsCallback 非常熟悉,那么可以忽略此文.
先来简单介绍一下RSF操作方式.
ecside支持两种RSF方式: 基于java collection层 和 基于数据库层,下面分别介绍:
一:基于java collection层:
这是ec的默认实现方式, 最简单易用.
你要做的就是将整个列表所要展现的全部数据放入collection 内,并交给EC来处理.
其中RSF操作,全部由EC在内存中完成,由于你已经将全部数据放入了collection中,
所以排序 过滤都是基于全部数据的.
你要在DAO中做的就是一个 查询操作,SQL语句中不需要加入 关于排序 分页 过滤的代码.
这种方式的优点非常明显:实现简单.
缺点同样明显,而且在很大程度上是致命的: 数据量大的时候速度慢,而且很可能outofmemery.
这时候我们就需要第二种方式了:
二:基于数据库层:
在这种方式下,EC的角色发生了一点点变化.
此时,EC负责把 collection 里的内容展现出来, 同时会向你提供RSF相关的参数.
而这些参数需要你自己手动取得 并传入到DAO中(当然EC提供了很多方便的方法来帮助你取得这些参数),
具体功能的实现需要你自己在DAO中组织相应的SQL语句
这种方式的优缺点正好和方式一相反.
两种基本的实现方式介绍完了,下面讲一下实现:
大家可以看一下 ecside.properties 文件中的下列内容
table.filterRowsCallback.process=org.extremecomponents.table.callback.ProcessRowsCallback table.filterRowsCallback.limit=org.extremecomponents.table.callback.LimitCallback table.sortRowsCallback.process=org.extremecomponents.table.callback.ProcessRowsCallback table.sortRowsCallback.limit=org.extremecomponents.table.callback.LimitCallback table.retrieveRowsCallback.process=org.extremecomponents.table.callback.ProcessRowsCallback table.retrieveRowsCallback.limit=org.extremecomponents.table.callback.LimitCallback
其中 ProcessRowsCallback 采用了方式一 ,LimitCallback采用了方式二
而table.retrieveRowsCallback.default会告诉EC你默认使用的是哪个.
同样你也可以在 ec:table 标签里 指定
<ec:table filterRowsCallback="process/limit" sortRowsCallback="process/limit" retrieveRowsCallback="process/limit" ... >
大家可能还看到了 org.ecside.table.callback.CommonLimitCallback 这个是我自己随意组合出来的一个rowcallback
他在执行分页的时候,使用了方式二,而排序 过滤的时候使用了方式一
所以,大家可能会发现,DEMO中的排序 过滤方法只对当前页有效.
我这么做其实是一种偷懒的方式,但多数情况下,正如网友所说"只排当页数据毫无意义",你们说的没错,的确如此:)
我会在新版本的DEMO中提供两种方式的完整的实例,还请大家耐心等待
发表评论
- 浏览: 835824 次
- 性别:

- 来自: 小胖儿的大城

- 详细资料
搜索本博客
我的相册
闹闹的留言
共 78 张
共 78 张
链接
最新评论
-
JE要是能够加上这样一个功 ...
JavaEye的博客毕竟是一个技术博客,相册是非常次要的功能。事实上我自己私人的 ...
-- by robbin -
JE要是能够加上这样一个功 ...
使用picasa之类的客户端管理照片,上传照片超级方便,打包成zip纯属多此一举 ...
-- by crofton -
[发布]GT-Grid 1.18版 & ...
column的 sortable : false
-- by fins -
JE要是能够加上这样一个功 ...
Quake Wang 写道 很好的建议,但是用zip打包上传有安全隐患: 服务器 ...
-- by fins -
[发布]GT-Grid 1.18版 & ...
我不想用排序功能,怎样去掉...?谢谢!
-- by zuiwoxing






评论排行榜