paginación de hecho es fácil. Solo tiene que seguir pasando uno o dos parámetros alrededor de: firstrow
y opcionalmente rowcount
(que también se puede mantener en el servidor). Cuando el usuario final hace clic en Next, simplemente incrementa el valor de firstrow
con el valor rowcount
. Cuando el usuario final hace clic en Atrás, solo disminuye el valor de firstrow
con el valor rowcount
. Solo necesita comprobar si no supera los límites de 0
y totalrows
y modificar en consecuencia.
Luego, según los firstrow
y rowcount
deseados, usted sabe exactamente qué datos mostrar. Si todos los datos ya están en algún List
en la memoria de Java, entonces simplemente usa List#subList()
para obtener una sublista de la misma para su visualización. Sin embargo, no es eficiente duplicar toda la tabla de la base de datos en la memoria de Java. Puede que no dañe cuando solo hay 100 filas, pero cuando es mucho más que eso y/o lo está duplicando para cada usuario, la aplicación se quedará sin memoria muy pronto.
En ese caso, preferiría paginar a nivel de base de datos. En, por ejemplo, MySQL puede usar la cláusula LIMIT
para obtener un subconjunto de resultados de la base de datos. JPA/Hibernate incluso proporciona maneras usando los métodos setFirstResult()
y setMaxResults()
de Query
y Criteria
respectivamente. Puede encontrar ejemplos en this y this respuesta.
Puede encontrar un ejemplo de patada inicial básica JSF 1.2 de paginación (y clasificación) similar a la de Google en this article. Utiliza componentes de Tomahawk, pero en JSF 2.0 puede simplemente dejarlos al hacer el bean @ViewScoped
(reemplaza t:saveState
) y usando ui:repeat
(reemplaza t:dataList
).
Por último, pero no menos importante, hay muchas bibliotecas de componentes que hacen todos los trabajos en un solo componente. Por ejemplo, RichFaces<rich:datascroller>
y PrimeFaces<p:dataTable paginator="true">
(también se puede hacer ajaxical).
¿Utiliza richfaces en su aplicación? –
Yo no. Pero podría si eso me ayuda :-) – Sven