0

我有一家商店,其中我提到 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是这样的 ["total":"500","start":[{....}]]

我检查了http://docs.sencha.com/extjs/4.2.1/extjs-build/examples/grid/paging.html上的网格分页示例,但我不明白为什么我的分页不起作用。请帮忙。

4

2 回答 2

1

如果您的 servlet 从数据库中获取 500 行并将 500 行构建到 JSON 响应中,那么您获取所有记录的原因正是因为您要发回所有 500 条记录。

如果要分页,则必须在 SQL 查询(最佳)或某些后查询过程中实现一些逻辑,以限制行数以匹配请求中传递的限制参数(可行,但不建议)。

对于 MySQL,这通常是通过limit SOMEMAXNUMBER offset SOMEPAGENUMBER.

因此,如果您的页面大小为 20,您的查询可能如下所示:

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

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

于 2013-05-28T04:32:34.080 回答
0

定义分页工具栏时,向服务器发出的请求具有三个附加参数:page、start 和 limit。
尝试添加autoLoad : {start: 0, limit: 20}到您的商店。并根据此参数更新您的 java 代码。
*不要忘记store: your_Store在您的 PagingToolbar中添加

于 2013-05-27T10:16:04.483 回答