Неверно работает счетчик строк SimplePager

#gwt

#gwt

Вопрос:

Я использую SimplePager и хочу отображать 12 элементов (пользователей) на странице. Весь мой набор данных состоит из 20 элементов.

Проблема в том, что на первой странице (правильно) показаны элементы 1-12, но на второй странице показаны элементы 9-20. Я хочу, чтобы на второй странице отображались элементы 13-20.

Что происходит не так?

Вот мой код:

 CellTable<User> cellTable = new CellTable<User>();

SimplePager pager = new SimplePager(TextLocation.CENTER);      
pager.setDisplay(cellTable);    
pager.setPageSize(12);


ListDataProvider<User> dataProvider = new ListDataProvider<User>();<br>
dataProvider.setList(USERSList);  
dataProvider.addDataDisplay(cellTable);
  

Заранее благодарю вас!

Ответ №1:

Настройка

 setRangeLimited(false)
  

всегда будет отображаться следующая страница.

Вместо этого я установил значение rangeLimited равным true и переопределил для этого следующий метод :

 @Override
public void setPageStart(int index) {
  if (getDisplay() != null) {
    Range range = getDisplay().getVisibleRange();
    int pageSize = range.getLength();

    // Removed the min to show fixed ranges
    //if (isRangeLimited amp;amp; display.isRowCountExact()) {
    //  index = Math.min(index, display.getRowCount() - pageSize);
    //}

    index = Math.max(0, index);
    if (index != range.getStart()) {
      getDisplay().setVisibleRange(index, pageSize);
    }
  }
}
  

Ответ №2:

Попробуйте установить:

 setRangeLimited(false)
  

Более подробная информация:

http://groups.google.com/group/google-web-toolkit/browse_thread/thread/45e77082b796281d/d5101729e83a74ff?lnk=gstamp;q=pager last page#d5101729e83a74ff

Комментарии:

1. приятно, но трюк для отключения бесконечной ошибки «hasnextpage» не работает, что вы думаете??

2. @Fabio, приведенное ниже решение работает и устраняет проблему с hasnextpage

Ответ №3:

решение @fbfcn и @MasterUZ работает, с несколькими небольшими изменениями, чтобы привести его в соответствие с SimplePager от GWT 2.4:

 public class MySimplePager extends SimplePager {

    public MySimplePager() {
        this.setRangeLimited(true);
    }

    public MySimplePager(TextLocation location, Resources resources, boolean showFastForwardButton, int fastForwardRows, boolean showLastPageButton) {
        super(location, resources, showFastForwardButton, fastForwardRows, showLastPageButton);
        this.setRangeLimited(true);
    }

    public void setPageStart(int index) {

        if (this.getDisplay() != null) {
          Range range = getDisplay().getVisibleRange();
          int pageSize = range.getLength();
          if (!isRangeLimited() amp;amp; getDisplay().isRowCountExact()) {
            index = Math.min(index, getDisplay().getRowCount() - pageSize);
          }
          index = Math.max(0, index);
          if (index != range.getStart()) {
            getDisplay().setVisibleRange(index, pageSize);
          }
        }  
      }
    }
  

Комментарии:

1. ЭТОТ! Идеально работает с GWT 2.5.1

Ответ №4:

 import com.google.gwt.user.cellview.client.SimplePager;
import com.google.gwt.view.client.Range;

public class MySimplePager extends SimplePager {
    public MySimplePager() {
        this.setRangeLimited(true);
    }

    public MySimplePager(TextLocation location, Resources resources, boolean showFastForwardButton, int fastForwardRows, boolean showLastPageButton) {
        super(location, resources, showFastForwardButton, fastForwardRows, showLastPageButton);
        this.setRangeLimited(true);
    }

    @Override
    public void setPageStart(int index) {
        if (getDisplay() != null) {
            Range range = getDisplay().getVisibleRange();
            int pageSize = range.getLength();
            if (!isRangeLimited() amp;amp; getDisplay().isRowCountExact()) {
                index = Math.min(index, getDisplay().getRowCount() - pageSize);
            }
            index = Math.max(0, index);
            if (index != range.getStart()) {
                getDisplay().setVisibleRange(index, pageSize);
            }
        }
    }
}