2013-05-27 41 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