Пагинация на самом деле проста. Вам просто нужно постоянно передавать один или два параметра: firstrow и, возможно, rowcount (которые также могут быть сохранены на стороне сервера). Когда конечный пользователь нажимает Далее, вы просто увеличиваете значение firstrow на значение rowcount. Когда конечный пользователь нажимает Назад, вы просто уменьшаете значение firstrow на значение rowcount. Вам нужно только проверить, не выходит ли он за границы 0 и totalrows, и внести соответствующие изменения.
Затем, основываясь на желаемых firstrow и rowcount, вы точно знаете, какие данные отображать. Если все данные уже находятся в каком-то List в памяти Java, просто используйте _ 12_, чтобы получить из него подсписок для отображения. Однако неэффективно дублировать всю таблицу базы данных в памяти Java. Это может не повредить, когда это всего 100 строк, но когда это намного больше, и / или вы дублируете его для каждого отдельного пользователя, тогда приложению очень скоро не хватит памяти.
В этом случае вы бы предпочли разбивать страницы на уровне БД. Например, в MySQL вы можете использовать предложение LIMIT для получения подмножества результатов из БД. JPA / Hibernate даже предоставляет способы использования setFirstResult() и setMaxResults() методов Query и Criteria соответственно. Вы можете найти примеры в this и этот ответ.
Вы можете найти базовый пример целевого запуска JSF 1.2 с разбивкой на страницы (и сортировкой) в стиле Google в эта статья. Он использует компоненты Tomahawk, но в JSF 2.0 вы можете просто отказаться от них, сделав bean-компонент @ViewScoped (заменяет t:saveState) и используя ui:repeat (заменяет t:dataList).
И последнее, но не менее важное: существует множество библиотек компонентов, которые выполняют всю работу в одном компоненте. Например, RichFaces _ 22_ и PrimeFaces _ 23_ (также можно сделать ajaxical).
person
BalusC
schedule
19.08.2010