ExtJS 4.2 pageSize 不起作用

问题描述 投票:0回答:2

我有一家商店,其中我提到 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上的网格分页示例,我不明白为什么我的分页不起作用。请帮忙。

pagination server-side extjs4.2
2个回答
1
投票

如果您的 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 行。然后,当请求下一页时,偏移量会相应改变,依此类推。


0
投票

定义分页工具栏时,向服务器发出的请求具有三个附加参数:page、start 和 limit。
尝试在您的商店中添加

autoLoad : {start: 0, limit: 20}
。并根据这个参数更新你的java代码。
*不要忘记在 PagingToolbar 中添加
store: your_Store

© www.soinside.com 2019 - 2024. All rights reserved.