Rooock 2009-12-28 13:04
浏览 353
已采纳

ext表格分页不成功, 显示有22条记录,一共两页,但是却把所有数据都放在同一页上显示了.

如图所示:
[img]http://dl.iteye.com/upload/attachment/186170/9ac17176-f3d8-3d25-b5c6-cecb308cd9e3.jpg[/img]

我计划每页显示20天, 查询出22条记录, 应该把多余的放在第二页显示.
但是实际上所有数据都出现在第一页了.

我的关键代码:
1. 定义了store. 分页参数是0,20
[code="js"]
var store = new Ext.data.JsonStore({
url:'xxxxx',

baseParams:{start:0, limit:20},

totalProperty: "totalProperty",

root: "root",

idProperty: "MYID",

fields:[
{name: 'MYID', mapping: 'MYID'}
...

]

});
[/code]

  1. pageingToolbar. 每页限制20条. 使用的store:store
    [code="js"]
    bbar: new Ext.PagingToolbar({
    pageSize:20
    ,store:store
    ,displayInfo:true
    ,displayMsg:'显示第{0}数据到{1},一共有{2}条'
    ,emptyMsg:'没有记录'
    });
    [/code]

  2. java中返回给store的方法构造如下
    [code="java"]
    // 查询得到所有记录
    List> resultList = sqlMapClient.queryForList("abc");
    if(null == resultList){return null;}

// 组装返回结果
Map resultMap = new HashMap();
// 记录条数
resultMap.put("totalProperty", resultList.size());
// root
resultMap.put("root", resultList);
// MYID是我记录中的一个字段
resultMap.put("id", "MYID");
// 然后将这个resultMap转为json返回给前台
[/code]

不明白, 为什么我的分页不成功, 我拿官网上列子和我对比, 也没找到区别..

另外再多请教一个问题, EXT的分页是内存分页么.
我看官网的例子[url]http://www.extjs.com/deploy/dev/examples/grid/paging.html[/url],
它访问的URL中有6000多的记录. 这么多记录全加到内存中再分页的?

[b]问题补充:[/b]


OK.
hearken01:
你的意思是
[code="java"]
for(int i = start; i < (list.size() - limit) > 0 ? limit : list.size(); i++)
{
// then return these results ?
}
[/code]

这是内存分页的做法..
定义了baseParams:{start:0, limit:20}
当点下了下一页的时候, 使start = 21. and go on

既然, start limit已经被传到了java中, 那我可否更进一步, 赋给SQL

[code="sql"]
select * from mytab where offset = #start# and limit = #limit#
[/code]

这就是数据库分页了.
[color=red]但是这样有个问题..
怎么才能到最后一页呢[/color]
[b]问题补充:[/b]
如果使用了数据库分页的话, 返回的总是当前页数据, 无法计算totalProperty, 也就不知道有几页了啊~
[b]问题补充:[/b]
谢谢, 我已经做出来了.
最后采用的数据库分页.

方法是:
1. 把start, limit一直传到sql中, 数据库查询出记录.
2. 多写一条SQL. 把记录总条数查出来.
3. 组转一个Map. root指向记录集合. totalProperty指向总条数.

这样, 每次点上一页, 下一页就能数据库分页. 压力转移到了数据库上.

不过这样做还有个暇疵.
每次查询的时候, 都要多一条SQL去查总记录数.
由于查询是不加锁的, 万一当我查询出记录后, 另一个操作把记录全干掉...就那啥杯具了.

不知大大有啥好办法没?

  • 写回答

4条回答 默认 最新

  • Ryankay 2009-12-28 16:15
    关注

    [quote]不过这样做还有个暇疵.
    每次查询的时候, 都要多一条SQL去查总记录数.
    由于查询是不加锁的, 万一当我查询出记录后, 另一个操作把记录全干掉...就那啥杯具了. [/quote]

    大家都这么干的,这个要具体情况具体分析的,看你数据库压力大不大,如果太大,就要考虑内存分页,减少数据库负荷,如果不是很大就用 这个吧,这些问题都是后期考虑的事情,甚至是你做完一个项目在还没有来得及考虑之前,这个项目就死了,呵呵,什么扩展性?扩展个啥?都是概念而已,,,扩展一个我还不如重新做一个,性能?等你用户起来再来优化吧。。。如果你比较负责一点,可以搞压力测试,看看瓶颈在哪,以作出对应的优化方案。。。

    至于数据同步,你都说了,没锁,要么你换ORACLE了。程序能干的最大限度整个事务出来,但也是方法级别的,你需要的是SQL级别的,每一条SQL都能被拦截掉的,那就只有靠数据库了。而且,可以肯定,开了锁,开起来更卡卡了,,,本来数据库向来都是瓶颈。。。就别 折腾他了,数据不同嘛,没什么严重的,当然,如果你是银行啊,股票啊这些对数据要求比较高的另当别论,那就只有牺牲性能了。

    最后,欢迎加入数据库分页的队伍 :arrow:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?