У меня есть dataTable с lazyLoading, нумерацией страниц и кнопкой в каждой строке, чтобы удалить строку. При удалении всех строк на последней странице, нумерация страниц выделяет первую страницу, но не показывает данных.
Например, у меня есть модель с 6 элементами и таблицей данных, отображающей 2 строки одновременно. Я перехожу на последнюю страницу, удаляю там два элемента и, даже когда пагинатор показывает, что есть страницы, текущая выделенная страница является первой, и данные не отображаются.
Мои тесты показывают, что проблема с параметром first метода fetchLazyData в моей ленивой модели не обновляется должным образом.
Это вывод после загрузки страницы, перехода на последнюю страницу таблицы и удаления строк на этой странице:
信息: first: 4. pageSize: 2
信息: first: 4. pageSize: 2
信息: first: 4. pageSize: 2
Код прилагается.
Насколько я тестировал, эту проблему можно воспроизвести в Glassfish v3 с обоими простыми интерфейсами 2.0.1 и 2.1 rc1 SNAPSHOT.
Мой текущий обходной путь - проверка, если значением first является число элементов в модели и изменение его, когда это необходимо в вызове fetchLazyData
public List<Model> fetchLazyData(int first, int pageSize) {
System.out.println("first: " + first + ". pageSize: " + pageSize);
first = models.size() <= first ? 0 : first;
return models.subList(first, Math.min(first + pageSize, models.size()));
}
};
но добавление этой строки в каждую ленивую модель - это трудоемкая работа, которая выглядит не очень хорошо.
Я что-то упустил?