2012-03-22 66 views
4

我面臨SimplePager的lastButton問題。 我有3頁的celltable,頁面大小= 11(1空記錄+ 10條記錄(有價值)),總記錄= 26。GWT SimplePager LastButton問題

我通過擴展SimplePager使用CustomerPager。

第一次嘗試1 + 10記錄顯示在celltable中:Next &最後一頁按鈕啓用(第一個&上一個按鈕被禁用),這是正確的。 但尾頁按鈕不工作... :(不知道什麼問題...(事件不火)

奇怪的現象:

@ 1個頁按鈕只工作時我訪問到最後一頁( 3頁在我的情況)

@ 2假設我在第一頁n我移動到第二頁(共3頁在celltable)當時所有按鈕啓用這是正確的 在這種情況下最後一個按鈕是工作,但像下一步按鈕

我的GWT應用程序集成到我們的產品之一,所以不能調試我來自客戶端。

可能指標值在setPage(INT index)方法不當從AbstractPager

碼流爲最後按鈕

//From SimplePager 

lastPage.addClickHandler(new ClickHandler() { 
     public void onClick(ClickEvent event) { 
      lastPage(); 
     } 
     }); 


     @Override 
    public void lastPage() { 
    super.lastPage(); 
    } 

// From AbstractPager 
    /** 
    * Go to the last page. 
    */ 
    protected void lastPage() { 
    setPage(getPageCount() - 1); 
    } 
protected void setPage(int index) { 
    if (display != null && (!isRangeLimited || !display.isRowCountExact() || hasPage(index))) { 
     // We don't use the local version of setPageStart because it would 
     // constrain the index, but the user probably wants to use absolute page 
     // indexes. 
     int pageSize = getPageSize(); 
     display.setVisibleRange(pageSize * index, pageSize); 
    } 
    } 

如下或可以是一些條件下從上面的代碼假(從setPage ())

實際記錄= 26和3個空的記錄(第1空記錄/頁)

可能b題與數據尺寸:|

如何根據數據大小檢查頁數? ?

我該如何解決這個問題?

+0

我認爲這個問題是在'setPage()'與條件有關。在「if」條件之前嘗試放置SOP或調試代碼 – 2012-03-29 11:02:46

回答

0

只在OnRange更改方法中添加cellTable.setRowCount(int size, boolean isExact) AsyncDataProvider。 我的問題就解決了:)

protected void onRangeChanged(HasData<RecordVO> display) { 
//----- Some code -------- 
cellTable.setRowCount(searchRecordCount, false); 
//----- Some code -------- 
} 
0

沒有看到更多的代碼,這是一個很難回答的問題,因爲可能有多個地方出現問題。

我會確保您在SimplePager上調用setDisplay(...),以便它具有需要計算其範圍的數據。

如果你不能在devmode中運行,我建議在瀏覽器中設置一些GWT日誌記錄(例如將日誌寫入彈出面板或其他東西,例如see this discussion)。

3

編輯:我發現尋呼機的默認構造函數並沒有給你一個「最後一個」按鈕,而是一個「快進1000線」按鈕,而不是(可怕的吧?)。

調用下面的構造像這樣,看看你的問題就解決了:

SimplePager.Resources resources = GWT.create(SimplePager.Resources.class); SimplePager simplePager = new SimplePager(TextLocation.CENTER, resources , false, 1000, true);

第一個「假」標記關閉「快進鍵」和最後一個「真」標誌開啓「最後」按鈕。

此外,最後一個按鈕只有在傳呼機知道您擁有的記錄總量時纔有效。

可以調用表的setRowCount功能來更新總像這樣:

int totalRecordsSize = 26; //the total amount of records you have boolean isTotalExact = true; //is it an estimate or an exact match table.setRowCount(totalRecordsSize , isTotalExact); //sets the table's total and updates the pager (assuming you called pager.setDisplay(table) before)

,如果你是一個附加的DataProvider的工作,比它的所有updateRowCount方法,而不是(相同的使用)。

+1

[「尋呼機的默認構造函數不會給你一個」最後一個「按鈕,而是一個」快進1000線「按鈕(可怕的是吧?)」]是的,這真的很可怕。我只是吹了一個下午。 – Jay 2013-05-30 20:35:48

+1

另外,請注意這個構造函數:SimplePager(SimplePager.TextLocation位置,布爾showFastForwardButton,布爾showLastPageButton) – 2013-06-10 13:40:47

0

我認爲問題與setPage()中的條件有關。嘗試在if條件之前添加SOP或調試代碼