如图所示:
[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]
pageingToolbar. 每页限制20条. 使用的store:store
[code="js"]
bbar: new Ext.PagingToolbar({
pageSize:20
,store:store
,displayInfo:true
,displayMsg:'显示第{0}数据到{1},一共有{2}条'
,emptyMsg:'没有记录'
});
[/code]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去查总记录数.
由于查询是不加锁的, 万一当我查询出记录后, 另一个操作把记录全干掉...就那啥杯具了.
不知大大有啥好办法没?