2013-05-27 123 views
0

我有一个商店,其中我已经提到pageSize配置为20,并且在我的阅读器中,我提到了totalCount配置。我向Java中的servlet发出代理请求。 servlet从MySQL表中获取数据并构建一个包含500行的json,并将json中的totalCount配置设置为500.我在最后调用store.loadPage(1)。尽管如此,我的网格正在加载网格中每个页面上的所有500条记录。我究竟做错了什么?ExtJS 4.2 pageSize不工作

下面我给我的代码

var store = Ext.create('Ext.data.Store', { 
    model: 'AM.model.User', 
    pageSize: 20, 
    proxy: { 
     type: 'ajax', 
     url: '/pwbench/FcmServlet', 
     reader: { 
      type: 'json', 
      totalProperty: 'total', 
      root: 'start' 
     }, 
     writer: { 
      type: 'json' 
     } 
    }, 
}); 

的JSON从servlet返回一些快照是这样 [ “总”: “500”, “开始”:[{.... }]]

我检查了http://docs.sencha.com/extjs/4.2.1/extjs-build/examples/grid/paging.html上的网格分页示例,我无法理解为什么我的分页不工作。请帮忙。

回答

1

如果你的servlet被取出由DB 500行,并建立500行成JSON响应,那么你得到的所有记录的原因是恰恰,因为您要发回所有500条记录。

如果你想分页,你必须实现它的一些逻辑到你的SQL查询(最好)或一些后查询过程,以限制行数以匹配请求中传递的极限参数(可以,但不建议)。

对于MySQL,这通常通过limit SOMEMAXNUMBER offset SOMEPAGENUMBER完成。

因此,如果您的页面大小为20,你的查询可能是这样的:

select * 
from sometable 
order by column 1 ASC 
limit 20 offset 1 

这将返回前20行,始于第一行。然后,当请求下一页时,偏移量会适当地改变,依此类推。

+0

谢谢。我想到totalCount需要反映网格中的记录总数,但我需要从服务器端一次获取表中记录的pageSize数量。 –

+0

@existdissolve,您是否可以为JSON响应提供任何查询后处理解决方案来限制数据? –

+0

你会这样做的方式(我强烈建议你不要)查询所有的记录,然后循环它们......从“开始”行开始,结束于任何“开始”+“ pageSize“是。不过,这是一个非常糟糕的方法,因为它相对于db中总记录的数量增加了处理时间......想象一下,如果你有几百万条记录:) – existdissolve

0

定义分页工具栏时,对服务器的请求有三个附加参数:页面,启动和限制。
尝试将autoLoad : {start: 0, limit: 20}加入您的店铺。并根据此参数更新您的Java代码。
*不要忘了在你的PagingToolbar添加store: your_Store

+1

您不需要将pageSize添加到分页工具栏(它甚至不是Ext.toolbar.Paging的配置)。分页工具栏由商店的配置驱动。 – existdissolve