Нумерация страниц на самом деле легко.Вы просто должны передавать один или два параметра: firstrow
и, необязательно, rowcount
(которые также могут храниться на стороне сервера).Когда конечный пользователь нажимает Далее , вы просто увеличиваете значение firstrow
на значение rowcount
.Когда конечный пользователь нажимает Back , вы просто уменьшаете значение firstrow
до значения rowcount
.Вам нужно только проверить, не превышает ли он границы 0
и totalrows
, и соответственно изменить.
Затем, основываясь на желаемых значениях firstrow
и rowcount
, вы точно знаете, какие данныедля отображения.Если все данные уже находятся в некотором List
в памяти Java, тогда вы просто используете List#subList()
, чтобы получить из него подсписок для отображения.Однако неэффективно дублировать всю таблицу базы данных в память Java.Это может не навредить, когда всего 100 строк, но когда это намного больше, и / или вы дублируете его для каждого отдельного пользователя, тогда приложению очень скоро не хватит памяти.
В этом случае вы бы предпочли разбивать на страницы на уровне БД.Например, в MySQL вы можете использовать предложение LIMIT
для получения подмножества результатов из БД.JPA / Hibernate даже предоставляет способы использования setFirstResult()
и setMaxResults()
методов Query
и Criteria
соответственно.Вы можете найти примеры в this и this answer.
Вы можете найти базовый JSF 1.2 целевой пример запуска Google-подобной нумерации страниц (и сортировки) в эта статья .Он использует компоненты Tomahawk, но в JSF 2.0 вы можете просто оставить их, сделав компонент @ViewScoped
(заменяет t:saveState
) и используя ui:repeat
(заменяет t:dataList
).
И последнее, но не менее важноеЕсть много библиотек компонентов, которые делают все работы в одном компоненте.Например, RichFaces <rich:datascroller>
и PrimeFaces <p:dataTable paginator="true">
(также может быть сделано ajaxical ).