Пагинация в Java

Я написал логику подкачки:

Мое требование: общее количество отображаемых элементов: 100 на странице, если я нажму «Далее», должны отображаться следующие 100 записей, если я нажму предыдущие 100 записей.

Начальные значения переменных:

  • показатьОт:1,
  • показать до: 100
  • максимальное количество элементов: зависит от размера данных.
  • Размер страницы: 100.

Код:

if(paging.getAction().equalsIgnoreCase("Next")){
  paging.setTotalRec(availableList.size());
  showFrom = (showTo + 1);
  showTo = showFrom + 100- 1;
  if(showTo >= paging.getTotalRec())
    showTo = paging.getTotalRec();
  paging.setShowFrom(showFrom);
  paging.setShowTo(showTo);
}

else if(paging.getAction().equalsIgnoreCase("Previous")){
  showTo = showFrom - 1;
  showFrom = (showFrom - 100);
  paging.setShowTo(showTo);
  paging.setShowFrom(showFrom);
  paging.setTotalRec(availableList.size());
}

Здесь я могу удалить и добавить элементы к существующим данным. Приведенный выше код работает нормально, если я добавляю и удаляю несколько элементов. Но если я удаляю или добавляю 100 элементов за раз, счетчики не отображаются должным образом. Приведенный выше код работает нормально, если я добавляю и удаляю мало элементов.


person user569125    schedule 17.01.2011    source источник
comment
Справа, когда вы задавали свой вопрос, было удобное поле Как форматировать. Стоит прочитать, так как страница связана с [?] прямо над областью вопроса.   -  person T.J. Crowder    schedule 18.01.2011
comment
Что такое paging?   -  person DinhNgocHien    schedule 26.11.2014


Ответы (2)


Некоторые вещи, которые нужно улучшить:

  • замените «волшебное» значение 100 на final int PAGE_SIZE = 100;
  • исключить избыточный код.
  paging.setShowTo(showTo);
  paging.setShowFrom(showFrom);
  paging.setTotalRec(availableList.size());

за пределами if/else, чтобы сделать вашу логику более ясной

  • Убедитесь, что предыдущее >= 0 и следующее ‹= количество записей

Изменить:

final int PAGE_SIZE = 100;
int numberOfPages = -1;
int currentPage = -1;

public void initializeVariables(){
  paging.setTotalRec(availableList.size());
  showFrom = 1; 
  showTo = PAGE_SIZE;
  //keep track of how many pages there should be
  numberOfPages = paging.getTotalRec()/PAGE_SIZE;
  currentPage = 1;
}

public void handlePagingAction(){
  if(paging.getAction().equalsIgnoreCase("Next")){
     if(currentPage < numberOfPages){
        ++currentPage;
     }
  }else if(paging.getAction().equalsIgnoreCase("Previous")){
     if(currentPage > 1){       
       --currentPage;
     }
  }      

  showFrom = (currentPage - 1) * PAGE_SIZE + 1;
  if(showFrom < 0){
    showFrom = 0
  }

  showTo = currentPage * PAGE_SIZE;
  if(showTo >= paging.getTotalRec()){
    showTo = paging.getTotalRec();
  }     

  paging.setShowTo(showTo);
  paging.setShowFrom(showFrom);
}
person brian_d    schedule 17.01.2011
comment
мозг: Не могли бы вы изменить этот код, пожалуйста, я не понимаю, чего мне не хватает. - person user569125; 18.01.2011
comment
Мозг: следующий работает нормально, предыдущая логика не удалась. сначала от 1 до 100 от 288,101 до 200, 201 до 288. если я нажимаю предыдущий, он показывает от 101 до 188 вместо 200. - person user569125; 18.01.2011
comment
Мозг: общее количество не всегда кратно 100. В моем предыдущем комментарии общее количество составляет 288. - person user569125; 18.01.2011
comment
Мозг: я вызываю этот метод из Ajax, моя нумерация страниц начинается с 0. Итак, изначально текущая страница равна 0, если я нажимаю «Далее», я увеличиваю, если я делаю предыдущее, я уменьшаю значение currentPage. Размер страницы всегда 100, ни одна из страниц не зависит по добавлению и удалению элементов. Мне нужно принять какие-либо специальные инструкции. - person user569125; 18.01.2011
comment
@ user569125 Соответственно настройте переменные, которые используют currentPage. пример) currentPage › 0 вместо currentPage › 1, currentPage вместо old (currentPage - 1), (currentPage + 1) вместо old currentPage - person brian_d; 18.01.2011

Некоторые замечания:

  • В строке showTo = showFrom + 100- 1; почему минус 1?
  • Если showTo равно paging.getTotalRec(), в следующий раз, когда вы нажмете Next, showFrom будет поверх paging.getTotalRec().
  • В предыдущей части отсутствуют тесты для предотвращения падения ниже 0

Надеюсь это поможет...

person Alexis Dufrenoy    schedule 17.01.2011