Paginación con jsp

Tengo una página jsp donde muestro el resultado de una consulta anteriormente seleccionada. El problema es que cuando la consulta retorna varias filas(más de 50) pues es muy maluco para ver toda la información y me gustaría que mostrara de a 20 filas y que con un botón de "siguiente" pudiera ver las otras 20 filas de registros y así sucesivamente. Estilo google que muestra varias paginas de resultados <- 1 2 3 4 ... ->.
Si alguien me puede indicar como hacer esto que necesito en java(jsp)
Respuesta
1
Para hacer esto tienes varias opciones, la mejor es usar una variable de Session donde almacenes el numero de filas devuelta por la consulta y si es mayor de 20 entonces puedes realizar la consulta normal pero usando la instrucción limit de SQL que recibe dos parámetros enteros, el primero el offset (el indice de inicio) y el segundo el length (el numero de filas que devolverá la consulta, algo así:
Resultset rs = st.executeQuery("selec * from Empleados limit 0,20");
De esta forma la consulta devolverá las primeras 20 filas a partir de la fila N° 0 de la consulta y así deberás hacerlo en las demás páginas pero moficando el offset de acuerdo a la página donde se encuentren, por ejemplo en la segunda seri algo así:
Resultset rs = st.executeQuery("selec * from Empleados limit 20,20");
Así mostrara las siguientes 20 filas a partir del indice 20.
Hola Alejosoft!.. muchas gracias por tu respuesta ... pero tengo una duda.. lo que pasa es que siempre utilizo un solo jsp que muestra las filas devueltas por cualquier consulta... y entonces como hago para que al hacer click sobre el botón "siguiente" se refresque este mismo jsp y a la vez cambie el para- metro offset de la función limit...
Muchas gracias
lo que quieres hacer depende de si es un boton o una imagen
el "siguiente", si es un boton este debe estar denro de un <form>
Y el action del form debe ser la misma página, que para el ejemplo
la llamaremos página.jsp, el botón debe ser el submit del form, y
simplemente lo que hacemos es guardar en la session el numero del
limit para hacer la consulta usando ese numero, más o menos ser¡a
Algo así:
<?
Integer limit = (Integer)session.getAttribute("limit");
limit = request.getParameter("bandera") == null ? null: limit?
// si limit es null es porque es la primera vez que se carga la pagina en
// en la session actual
if ( limit == null ){
limit = new Integer(0);
}
// el 21 es para saber si despues de las 20 hay m s para mostrar
ResultSet rs = st.executeQuery("selec * from Empleados limit "+limit.intValue()+",21");
int contadorFilas = 0;
while( rs.next() ){
// aqui debes llenar la tabla donde muestras la cosulta, o
// llenar un Vector con los datos para usarlo m s abajo
// y despues contamos las filas
contadorFilas++;
}
if ( contadorFilas > 20 ){
// eliminamos la ultima fila del vector, o sea, la 21
// para que no aparezca.
// luego actualizamos el limit de la session
session.setAttribute("limit",new Integer(limit.intValue()+20));
}
else {
// Quiere decir que no hay m es siguientes, por lo tanto el botón
// siguiente no debe aparecer o debe estar deshabilitado
}
?>
...
El el form:
// Esta bandera nos servirá para saber si es la primera vez dentro de la session que se llama a esta página
// Para poner el limit en 0, cuando llames desde otra página a esta no mandes nada como parámetro, o sea
// Invocala así "página.jsp", para que al obtener el parámetro con el método request. GetParameter() devuelva
// un null.
<form action="pagina.jsp?bandera=0">
.....
<!-- el boton -->
<input type="submit"/>
</form>
<!-- eso es todo, no lo he probado, asi que es probable tenga algun error, pero tienes la idea
que es lo importante, bye -->

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas