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)
1 respuesta
Respuesta de alejosoft
1
1
alejosoft, 3 años de experiencia como Ingeniero de Sistemas, I speak English...
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 -->