我有一家商店,其中我提到 pageSize 配置为 20,并且在我的阅读器中我提到了 totalCount 配置。我用 Java 向 servlet 发出代理请求。该servlet从MySQL表中获取数据并构建一个包含500行的json,我将json中的totalCount配置设置为500。最后我调用store.loadPage(1)。尽管如此,我的网格正在加载网格中每个页面上的所有 500 条记录。我做错了什么?
下面我给出了我的代码的一些快照
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'
}
},
});
servlet返回的json是这样的 [“总计”:“500”,“开始”:[{....}]]
我检查了http://docs.sencha.com/extjs/4.2.1/extjs-build/examples/grid/paging.html上的网格分页示例,我不明白为什么我的分页不起作用。请帮忙。
如果您的 servlet 从数据库中获取 500 行并将 500 行构建到 JSON 响应中,那么您获取所有记录的原因是 恰恰是,因为您要发回所有 500 条记录。
如果您想要分页,您必须在 SQL 查询(最好)或某些后查询过程中实现一些逻辑,以限制行数以匹配请求中传递的限制参数(do-可以,但不建议)。
对于 MySQL,这通常是通过
limit SOMEMAXNUMBER offset SOMEPAGENUMBER
完成的。
因此,如果您的页面大小为 20,您的查询可能如下所示:
select *
from sometable
order by column 1 ASC
limit 20 offset 1
这将返回从第一行开始的前 20 行。然后,当请求下一页时,偏移量会相应改变,依此类推。
定义分页工具栏时,向服务器发出的请求具有三个附加参数:page、start 和 limit。
尝试在您的商店中添加
autoLoad : {start: 0, limit: 20}
。并根据这个参数更新你的java代码。store: your_Store