Paginación con jsp y beans

Yo tengo realizada una búsqueda de una serie de libros en el servlet y guardo toda la informaicon dada en un bean. Después, voy al jsp y saco la información mediante la función split y la voy metiendo en un array. Entonces, lo que quiero hacer es visualizar primero los diez primeros registros y darle a un botón de siguiente para que me siga visualizando los otros diez, y también poder volver atrás y visualizar los datos anteriores. La cuestión es que la paginación no la comprendo muy bien, ya que aunque yo tengo el numero de registros en total (ya que al hacer el split lo saco), no se como hacer para saber cuantas páginas en total necesitare y como saber en que página se encuentra en cada momento, ya que en la paginación se utiliza el mismo jsp para visualizar todos los registros por partes. Y no consigo encontrar un ejemplo que me aclare mis dudas.
¿Podríais darme un ejemplo de como se realiza una paginación sencilla explicado? Y explicarme brevemente su funcionamiento.
Es urgente. Muchas gracias de antemano.
{"lat":35.4606699514953,"lng":0.703125}

1 respuesta

Respuesta
1
Para saber el nº de páginas usa la la siguiente instrucción:
paginas = Math.floor(num_libros / 10);
Para paginar tienes que pasar un parámetro cada vez que llames al JSP. Ese parámetro puede ser la página a la que vas. Para saber cual es el primer elemento de la página haz.
ord_elemento = pagina * 10;
Hola!
Lo de saber las páginas que tengo en total lo entiendo, pero lo que no acabo de entender de la paginación es como sabe de que numero a que numero de libro tiene que visualizar simplemente indicándole la página a la que tiene que ir, que me supongo que siempre se llama a la misma página, ¿no? ¿Me podrías poner un código muy sencillo de la paginación para que la pueda comprender mejor?
Muchas gracias de antemano. Saludos.
Para la llamada al jsp puedes usar algo así:
mybook.jsp?pagina=1
En la parte del JSP supongamos que tienes los libros en un array que se llama "libros":
<%
int pagina=request.getParameter("pagina");
int prim_libro=pagina * 10;
for (int i = prim_libro; i < libros.length && i < prim_libro + 10; i++) {
    // Pon aqui el codigo para pintar la info del libro libros
}
%>
<a href="mybook.jsp?pagina=<%=pagina + 1%>">Siguiente</a>
<a href="mybook.jsp?pagina=<%=pagina - 1%>">Anterior</a>
Disculpa, hay un error:
Cambia la línea:
int prim_libro=pagina * 10;
por:
int prim_libro=(pagina-1)*10;
Hola!
Con el ejemplo que me has puesto lo entiendo mejor, siento ser pesada, pero para poner siguiente o anterior debería saber de antemano el numero de registros a visualizar yo hago lo siguiente:
double total = libros.length/10.0;
y
if(total == 1.0 || total <1.0){
No pondría nada solo los registros visualizados, es decir, pongo que se visualiza de 0 a 10 o a lo que sea
}else{
if(pagina < total){
if(pagina == 1){
<a href="mybook.jsp?pagina=<%=pagina+1%>">Siguiente</a>
}else{
<a href="mybook.jsp?pagina=<%=pagina + 1%>">Siguiente</a>
<a href="mybook.jsp?pagina=<%=pagina - 1%>">Anterior</a>
}
}else{
<a href="mybook.jsp?pagina=<%=pagina -1%>">Anterior</a>
}
}
Así estaría bien para poder visualizar por ejemplo 25 libros y que tanto en la primera página (solo salga siguiente) y en la ultima página (anterior), visualizando lo correctamente.
Siento ser pesada, pero es que si no se hace como el código que te he puesto arriba no entiendo como se visualiza anterior o siguiente o ambos según en la página en la que se este del total.
Muchas gracias de antemano. Saludos
Un consejo, si usas una variable de tipo double para obtener el total de páginas tendrás problemas con la parte decimal de la división. En el ejemplo que te he puesto utilizo la función Math. Floor que te devuelve el entero más alto resultado de la división y declaro la variable total de tipo entero que no me da problemas:
int total = (int)Math.floor(libros.length/10);
En cuanto a la página tienes que tener en cuenta que si consideramos que la primera página es la 0 la última página para 25 libros sería la 2, pero la variable total contendría un valor de 3, por lo que al poner lo de página siguiente o anterior sería necesario algún ajuste. Yo lo dejaría así:
Para página siguiente:
if (pagina + 1 < total) {
<a href="mybook.jsp?pagina=<%=pagina+1%>">Siguiente</a>
}
Para página anterior:
if (pagina > 0) {
<a href="mybook.jsp?pagina=<%=pagina-1%">Anterior</a>
}
¿Qué te parece?
Muchas gracias, ahora ya lo entiendo. Utilizaba una variable double ya que no encontré una función que me redondeara al alza el resultado de la operación, pero con la función que me indicas es mucho más simple realizar lo deseado. Con la descripción que has dado de dicha función en el caso de que el resultado de la división fuese 2.2, en la variable total se guardaría un 3, ¿no? Da igual que sea menor que 5 el decimal. Lo probare a ver si me funciona correctamente.
Muchas gracias.
Tienes 3 funciones para el redondeo:
1. Math.floor redondea siempre al alza (0.1 = 1, 0.9 = 1)
2. Math.ceil redondea siempre a la baja (0.1 = 0, 0.9 = 0)
3 Math.round redondea al más próximo (0.1 = 0, 0.5 = 1)
Muchas por tus explicaciones me han aclarado todas mis dudas.
Si consideras que no necesitas más ayuda por el momento, te agradecería que cerraras la pregunta. Más tarde puedes abrir una nueva si me buscas como experto y seguiré contestando encantado a tus dudas.
Tus aclaraciones me han sido de gran utilidad y me han simplificado el código que yo cree. En caso de tener más dudas al respecto, ya realizare la pregunta adecuada.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas