4

SimplePagerのlastButtonで問題が発生しています。セルテーブルに3ページあり、ページサイズ= 11(1つの空のレコード+ 10のレコード(値付き))、合計レコード=26です。

SimplePagerを拡張してCustomerPagerを使用しました。

最初の試行では、1 + 10レコードがセルテーブルに表示されます。次と最後のページボタンが有効になっています(最初と前のボタンが無効になっています)。これは正しいです。しかし、LastPageボタンが機能していません... :(問題が何であるかわからない...(イベントは発生しません)

奇妙な振る舞い:

@ 1 [最後のページ]ボタンは、最後のページ(私の場合は3ページ)にアクセスしたときにのみ機能します。

@ 2 1ページ目にいると仮定しますn2ページ目に移動しました(セルテーブルで合計3ページ)。その時、正しいすべてのボタンが有効になります。この場合、最後のボタンは機能していますが、次のボタンのように動作します

私のGWTアプリケーションは当社の製品の1つに統合されているため、クライアント側からデバッグすることはできません。

AbstractPagerのsetPage(int index)メソッドのインデックス値が不適切である可能性があります

最後のボタンのコードフローは次のとおりです

//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()から)いくつかの条件がfalseである可能性があります

実際のレコード=26および3空のレコード(最初の空のレコード/ページ)

dataSizeに問題がある可能性があります:|

データサイズに基づいてページ数を確認するにはどうすればよいですか??

どうすればこの問題を解決できますか?

4

4 に答える 4

3

編集:ポケットベルのデフォルトのコンストラクターには「最後の」ボタンはなく、代わりに「1000行早送り」ボタンが表示されることがわかりました(恐ろしいですよね?)。

このように次のコンストラクターを呼び出して、問題が解決したことを確認します。

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

最初の「false」フラグは「早送りボタン」をオフにし、最後の「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メソッドを使用します(同じ使用法)。

于 2012-03-27T10:23:34.733 に答える
0

コードを詳しく見ることなく、問題が発生している場所が複数ある可能性があるため、これは答えるのが難しい質問です。

SimplePagerを呼び出しsetDisplay(...)て、範囲を計算するために必要なデータを取得できるようにします。

devmodeで実行できない場合は、ブラウザーでGWTロギングを設定することをお勧めします(ログをポップアップパネルなどに書き込みます。例については、この説明を参照してください)。

于 2012-03-26T05:04:13.747 に答える
0

問題はの状態に関係していると思いますsetPage()。条件の前にSOPを配置するifか、コードをデバッグしてみてください

于 2012-03-29T11:49:42.863 に答える
0

cellTable.setRowCount(int size, boolean isExact)OnRange変更メソッドAsyncDataProviderでのみ追加されます。私の問題は解決しました:)

protected void onRangeChanged(HasData<RecordVO> display) {
//----- Some code --------
cellTable.setRowCount(searchRecordCount, false);
//----- Some code --------
}
于 2012-05-10T06:49:39.493 に答える