2011-08-14 15 views
1

私はcelltableとsimplepagerを持っています。私はリストとしてデータを返すためにサーバーへの非同期呼び出しを行っています。サーバー側ではgwt celltable paging

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()を使用することができます。

関連する問題