2011-08-14 164 views
1

我有celltable和一個簡單的pager。我正在對服務器進行異步調用以將數據作爲列表返回。gwt celltable尋呼

AsyncDataProvider<Entry> provider = new AsyncDataProvider<Entry>() { 
      @Override 
      protected void onRangeChanged(HasData<Entry> display) { 
       final int start = display.getVisibleRange().getStart(); 
       int length = display.getVisibleRange().getLength(); 

       AsyncCallback<List<Entry>> callback = new AsyncCallback<List<Entry>>() { 
        @Override 
        public void onFailure(Throwable caught) { 
         Window.alert(caught.getMessage()); 
        } 

        @Override 
        public void onSuccess(List<Entry> result) {       
         updateRowData(start, result); 
        } 
       }; 

       // The remote service that should be implemented 
       rpcService.fetchEntries(start, length, callback); 
      } 
     }; 

在服務器端...

public List<Entry> fetchEntries(int start, int length) { 
     if (start > ENTRIES.size()) 
      return new ArrayList<Entry>(); 

     int end = start + length > ENTRIES.size() ? ENTRIES.size() : start 
       + length; 
     ArrayList<Entry> sublist = new ArrayList<Entry>(
       (List<Entry>) ENTRIES.subList(start, end)); 
     return sublist; 
    } 

的問題是,我不知道用aync調用返回的數據集的大小。所以我不能設置updateRowCount。所以現在即使數據集只有24個字段,下一個按鈕總是處於活動狀態。有任何想法嗎 ?

回答

1

如何有關修改RPC服務返回一個標誌,以及:

class FetchEntriesResult{ 
    private int totalNumberOfEntries; 
    private List<Entry> entries; 
    //getters,setters, constructor etc... 
} 

而且你的服務方法變成類似:

public FetchEntriesResult fetchEntries(int start, int length) { 

     if (start > ENTRIES.size()) 
      return new ArrayList<Entry>(); 

     int end = start + length > ENTRIES.size() ? ENTRIES.size() : start 
       + length; 
     ArrayList<Entry> sublist = new ArrayList<Entry>(
       (List<Entry>) ENTRIES.subList(start, end)); 
     return new FetchEntriesResult(sublist,ENTRIES.size()); 
} 

現在你可以在客戶端上使用FetchEntriesResult.getTotalNumberOfEntries()