`

ECSide FAQ 之 :展现列表(分页)、排序、过滤的问题

阅读更多
最近很多人都问我关于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 文件中的下列内容
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中提供两种方式的完整的实例,还请大家耐心等待

分享到:
评论

相关推荐

    [FAQ106486]:LTEqpsk16QAM64QAM承载bit计算.pdf

    [FAQ106486]:LTEqpsk16QAM64QAM承载bit计算.pdf[FAQ106486]:LTEqpsk16QAM64QAM承载bit计算.pdf[FAQ106486]:LTEqpsk16QAM64QAM承载bit计算.pdf[FAQ106486]:LTEqpsk16QAM64QAM承载bit计算.pdf[FAQ106486]:LTEqpsk...

    jquery常见问题FAQ展开收缩列表效果

    jquery常见问题FAQ展开收缩列表效果

    rasa_ch_faq:用 rasa 实现 rasa faq 机器人

    支持的问题列表请参见:一些配置分词使用的 bert, 自定义了如何运行由于使用了 bert_chinese, 所以 需要下载 bert_chinese 模型。并放到 pre_models 文件夹中,重命名为 tf_model.h5命令执行:curl -L ...

    C语言FAQ 常见问题列表

    C 语言常见问题集 原著:Steve Summit 翻译:朱群英, 孙 云 修订版 0.9.4, 2005年6月23日 版权所有 © 2005 * 目录 * 1. 前言 * 2. 声明和初始化 o 2.1 我如何决定使用那种整数类型? o 2.2 64 位机上的 ...

    lwc-paginator:可组合分页LWC

    闪电Web组件传呼器如何实现可在任何项目中使用的可组合分页LWC的示例。 该存储库中包括pager及其相应的utils文件夹,以及一个示例FAQ组件,该组件使用pager器显示示例性常见问题: 有关更多信息,请参阅 的!

    可展开和收缩的jquery FAQ问答列表特效

    可展开和收缩的jquery FAQ问答列表特效

    jQuery toggle事件制作FAQ列表页.zip

    jQuery toggle事件制作FAQ列表页是一款基于jQuery toggle事件实现的FAQ文字列表点击展开和收缩文字内容。

    FAQ:TWGC常见问题解答常见问题汇总

    常见问题(FAQ)或问答(Q&A)是列出的问题和答案,所有这些问题和答案都应该在某些情况下是常见问题,并且与特定主题相关。 该格式通常用于电子邮件邮件列表和其他在线论坛,在这些论坛中经常会出现某些常见问题。...

    MAS售后维护、常见问题及处理

    FAQ:在客户端浏览器中输入MAS访问地址后,无法打开信息机页面 1)检查网络是否正常 2)检查TomCat是否运行正常 MAS常见问题(FAQ) FAQ:在客户端浏览器中输入MAS访问地址后,只出现TomCat主页 1)Web服务未能...

    图书管理ER图详解下载FAQ:

    很实用下载FAQ: Q: 为什么我点的下载下不了,但积分却被扣了 A: 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的. Q: 我的积分不多了,如何获取积分? A: 上传...

    Bjarne Stroustrup的FAQ:C++的风格与技巧

    Bjarne Stroustrup的FAQ:C++的风格与技巧

    faq:知识共享常见问题页面

    常问问题知识共享常见问题页面内容更新 :warning: 不要修改index.html文件中faq/ 。 它们是由构建脚本生成的。 仅修改降价文件( faq-en.md和faq-fr.md )。部署方式在您的本地计算机上: 确保已安装pandoc (可通过...

    spree-faq:疯狂商务的常见问题

    狂欢常见问题解答 ...bundle && bundle exec rails g spree_faq:install 注意: FAQ链接不会添加到前端布局中,取决于您将其放置在您喜欢的布局中。 贡献 请参阅相应的。 版权所有(c)2009-2015 , 和其他,根据

    kettle常见问题FAQ.doc

    kettle常见问题FAQ.doc kettle常见问题FAQ.doc

    css3列表FAQ问答特效.rar

    css3列表FAQ问答特效

    Java常见问题集锦(FAQ)

    JAVA FAQ Java常见问题集锦

    MTK平台:FAQ总结

    MTK平台源码开发上的一些问题的官方文档FAQ,只是是早期的文档了

    华为网络协议FAQ之路由协议篇 V2.0

    华为网络协议FAQ之路由协议篇 V2.0

    个人网上文档摘录合集-DIR-2024123-END

    FAQ:s5700如何通过基于ACL的简化流策略实现DHCP的offer报文过滤.txt FAQ:S交换机做VRRP,同时做DHCP服务器,如何做到DHCP服务器的热备.pdf FAQ:接口配置stp disable和配置stp edged-port enable有何区别?什么...

    c++faq ,讨论了关于c++的一些基本问题。英文。

    c++faq:即c++经常被问到的问题。是关于c++一些基本问题的讨论,对于刚学c++的初学者了解c++的基本知识是很有帮助的。英文。

Global site tag (gtag.js) - Google Analytics