Foros del Web » Programación para mayores de 30 ;) » Java »

Crear DataGrid en JSP

Estas en el tema de Crear DataGrid en JSP en el foro de Java en Foros del Web. Buenos Días Compañeros, Soy nuevo en el foro, pero recurro a ustedes a ver si alguno me puede ayudar con un inconveniente que tengo. Estoy ...
  #1 (permalink)  
Antiguo 26/08/2010, 08:20
 
Fecha de Ingreso: agosto-2009
Mensajes: 10
Antigüedad: 14 años, 9 meses
Puntos: 0
Crear DataGrid en JSP

Buenos Días Compañeros,


Soy nuevo en el foro, pero recurro a ustedes a ver si alguno me puede ayudar con un inconveniente que tengo.
Estoy realizando un sitio web con JSP y AJAX y necesito crear Data Grids para mostrar información de la BD, pero por mas que he buscado no he encontrado una solución factible.

Alguno me podría dar alguna sugerencia?

Gracias

Francisco Velásquez Rivas.
  #2 (permalink)  
Antiguo 26/08/2010, 09:17
Avatar de lukos  
Fecha de Ingreso: enero-2008
Ubicación: ikikin
Mensajes: 22
Antigüedad: 16 años, 4 meses
Puntos: 0
De acuerdo Respuesta: Crear DataGrid en JSP

Hola
Mira hace poco hice algo así (highlight en C++, pero es java ):
Código C++:
Ver original
  1. //clase1.java
  2. ResultSet rs = query.executeQuery("select * from pendientes");
  3.                 rs.afterLast();
  4.                 Boolean seguir=rs.previous();
  5.                 while(seguir){
  6.                     respuesta= respuesta + rs.getString(1)+ "#" +rs.getString(2)+ "#" +rs.getString(3)+ "#" + rs.getString(4)+ "#" +rs.getString(5)+ "@";
  7.                     seguir=rs.previous();
  8.                 }
  9.                 rs.close(); query.close(); conexion.close();
Y la respuesta era algo como esto (siguiendo a id, ip, requerimiento, archivo, fecha ):
Cita:
101#192.168.1.190#hardware#C:\infoextra.txt#2010-05-16@
El "@" es para terminar la línea, en caso que tengas más de 1.
Una vez que tenía todo el resultado, quedaba guardado en la variable respuesta, y ésta la enviaba a:
Código C++:
Ver original
  1. //clase2.java
  2. private String respuestaXML = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>";
  3. private String Pendientes(String cadena){
  4.         Boolean v=true;
  5.         try{
  6.             String [] temp = cadena.split("@");
  7.             for (String algo : temp){
  8.                 String [] temp1 = algo.split("#");
  9.                 if (v) {
  10.                     cuerpo ="<orden id=\""+temp1[0]+"\"><ip>"+temp1[1]+"</ip>"+"<req>"+
  11.                             temp1[2]+"</req><arch>"+temp1[3]+"</arch><fecha>"+temp1[4]+"</fecha></orden>";
  12.                     v=false;
  13.                 }else{
  14.                     cuerpo =cuerpo+"<orden id=\""+temp1[0]+"\"><ip>"+temp1[1]+"</ip>"+"<req>"+
  15.                             temp1[2]+"</req><arch>"+temp1[3]+"</arch><fecha>"+temp1[4]+"</fecha></orden>";
  16.                 }
  17.             }
  18.             this.respuesta = "<OrdenesPendiente>"+cuerpo+"</OrdenesPendiente>";
  19.         }catch(Exception e){
  20.             this.respuestaXML = e.toString();
  21.         }
  22.         return this.respuestaXML + this.respuesta;
  23.     }
De esta forma, recorres el string hasta encontrar el "@" (para abrir un padre), y separas cada pedazo en un string menor. Haces lo mismo, pero hasta encontrar el "#" (para el hijo) y luego ya separas tal cual.
Devuelves el resultado y te queda algo así:

Código XML:
Ver original
  1. <OrdenesPendiente>
  2.   <orden id="4">
  3.     <ip>192.168.13.154</ip>
  4.     <req>Otro</req>
  5.     <arch>System.Web.DynamicData.dll</arch>
  6.     <fecha>2010-08-19</fecha>
  7.   </orden>
  8.   <orden id="5">
  9.     <ip>192.168.1.197</ip>
  10.     <req>Hardware</req>
  11.     <arch>ruta</arch>
  12.     <fecha>2010-08-23</fecha>
  13.   </orden>
  14. </OrdenesPendiente>

Y todo esto lo llamas desde un js.
Código Javascript:
Ver original
  1. function leePendientes(){
  2.     if (oXML.readyState==4) {
  3.         try{
  4.             var xml = oXML.responseXML;
  5.             var cant = xml.getElementsByTagName('orden').length;
  6.             var respuesta = "<table id=\"pendientes\" class=\"tablesorter\" ><thead><tr><th>ID</th><th>IP</th><th>Requerimiento</th>"+
  7.                 "<th>Archivo Adjunto</th><th>Fecha</th></tr></thead><tbody>";
  8.             var semiResp;
  9.             for(i=0;i<cant;i++){
  10.                 var resp = "<tr>";
  11.                 var id = xml.getElementsByTagName('orden').item(i).getAttribute('id');
  12.                 resp = resp + "<td onClick=\"RoA("+id+")\">"+ id + "</td>";
  13.                 resp = resp + "<td>"+ xml.getElementsByTagName('ip')[i].firstChild.data + "</td>";
  14.                 resp = resp + "<td>"+ xml.getElementsByTagName('req')[i].firstChild.data + "</td>";
  15.                 resp = resp + "<td>"+ xml.getElementsByTagName('arch')[i].firstChild.data + "</td>";
  16.                 resp = resp + "<td>"+ xml.getElementsByTagName('fecha')[i].firstChild.data + "</td>";
  17.                 resp = resp + "</tr>";
  18.                 if (i==0) {
  19.                     semiResp = resp;
  20.                 }else{
  21.                     semiResp = semiResp + resp;
  22.                 }
  23.             }
  24.             document.getElementById('content_2').innerHTML = respuesta + semiResp + "</tboby>";
  25.             try{
  26.                 $("#pendientes").tablesorter({headers: {0:{sorter: false}, 1:{sorter: false}, 3:{sorter: false}}, widgets: ['zebra']});
  27.             }catch(e){
  28.                 alert(e.toString());
  29.             }
  30.         }catch (e){
  31.             alert(e.toString());
  32.         }
  33.     }else{
  34.         document.getElementById('content_2').innerHTML = '<b>Cargando..</b>';
  35.     }
  36. }

Y listo Es cosa que lo adaptes a lo que quieres hacer.
Para la grilla puedes usar [URL="http://tablesorter.com"]tablesorter[/URL] viendo los tutos en la misma web
  #3 (permalink)  
Antiguo 26/08/2010, 09:19
Avatar de cptanalatriste  
Fecha de Ingreso: octubre-2008
Ubicación: Lima, Perú
Mensajes: 118
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: Crear DataGrid en JSP

O podrías usar también DisplayTag (http://displaytag.sourceforge.net/1.2/) . Por estos lares es bastante popular xD
__________________
Carlos G. Gavidia
Sun Certified Professional
IBM Certified Solution Designer
http://certified-es.blogspot.com/
  #4 (permalink)  
Antiguo 26/08/2010, 13:59
 
Fecha de Ingreso: agosto-2009
Mensajes: 10
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Crear DataGrid en JSP

Muchas Gracias por las respuestas a los 2. Me fui por la opción de Lukos, funcionó muy bien, aunque estuve batallando por unas horas ya lo logré.

Mil Gracias de nuevo.

Saludos
  #5 (permalink)  
Antiguo 27/08/2010, 07:54
Avatar de lukos  
Fecha de Ingreso: enero-2008
Ubicación: ikikin
Mensajes: 22
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Crear DataGrid en JSP

Ps yo estuve batallando cerca de 5 días

Que bueno que te sirva
  #6 (permalink)  
Antiguo 29/08/2010, 04:31
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
Respuesta: Crear DataGrid en JSP

Una opción parecida a lo de Lukos es usar DataTable de YUI. Parecido pero la parte de la tabla está ya hecha, con paginación, ordenaciones etc..
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #7 (permalink)  
Antiguo 30/08/2010, 08:07
 
Fecha de Ingreso: agosto-2009
Mensajes: 10
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Crear DataGrid en JSP

Vuelvo a escribir, tal vez me puedan responder esta duda.

A la hora de mostrar el DataGrid creado con la opcion de Lukos todo normal, pero por ejemplo lo que quiero hacer es que la darle clic al ID del Empleado por ejemplo, me devuelve un número que nada que ver. Lo extraño es que en algunos casos lo hace bien pero en otros no

Esta es la función que dibuja el Grid

Código Javascript:
Ver original
  1. function funcionCallback()
  2. {
  3.     // Comprobamos si la peticion se ha completado (estado 4)
  4.     if( ajax4.readyState == 4 )
  5.     {
  6.         // Comprobamos si la respuesta ha sido correcta (resultado HTTP 200)
  7.         if( ajax4.status == 200 )
  8.         {
  9.             // Escribimos el resultado en la pagina HTML mediante DHTML
  10.             //document.all.grid_COSE041.innerHTML = "<b>"+ajax4.responseText+"</b>";
  11.                         try
  12.                         {
  13.                         var xml = ajax4.responseXML;
  14.                         var i=0;
  15.                         var cant = xml.getElementsByTagName('EMPNUM').length;
  16.                         var respuesta;
  17.                         if(tip=='A')
  18.                             {
  19.                                 respuesta = "<table id=\"COSE041\" border=2><thead><tr><th>INACTIVAR</th><th>FOLIO</th><th>NOMBRE</th>"+
  20.                                     "</thead><tbody>";
  21.                         }
  22.                         else
  23.                             {
  24.                                 respuesta = "<table id=\"COSE041\" border=2><thead><tr><th>ACTIVAR</th><th>FOLIO</th><th>NOMBRE</th>"+
  25.                                     "</thead><tbody>";
  26.                             }
  27.                         var semiresp;
  28.                         for(i=0;i<cant;i++)
  29.                         {
  30.                             var resp = "<tr>";
  31.                             var id = xml.getElementsByTagName('EMPNUM').item(i).getAttribute('id');
  32.  
  33.                             resp = resp + "<td>"+ id + "</td>";
  34.                             resp = resp + "<td>"+ xml.getElementsByTagName('EMPNOM')[i].firstChild.data + "</td>";
  35.                             if(tip=='A')
  36.                                 {
  37.                                     resp = resp + "<td><img alt=Consultar  src=imagenes/equis.png onClick=\"activar("+id+",'I');\"></td>";
  38.                                 }
  39.                                 else
  40.                                     {
  41.                                         resp = resp + "<td><img alt=Consultar  src=imagenes/cambiar.png onClick=\"activar("+id+",'A');\"></td>";
  42.                                     }
  43.                             resp = resp + "</tr>";
  44.                             if (i==0)
  45.                             {
  46.                                 semiresp = resp;
  47.                             }
  48.                             else
  49.                             {
  50.                                 semiresp = semiresp + resp;
  51.                             }
  52.                         }
  53.                         document.getElementById('grid_COSE041').innerHTML = respuesta + semiresp + "</tboby></table>";
  54.                 }
  55.                 catch(e)
  56.                 {
  57.                     alert(e.toString());
  58.                 }
  59.         }
  60.     }
  61. }


Esta es la que llama el evento para obtener el id del Empleado

Código Javascript:
Ver original
  1. function activar(EMPNUM, TIPO)
  2. {
  3.     // Creamos el control XMLHttpRequest segun el navegador en el que estemos
  4.     if( window.XMLHttpRequest )
  5.         ajax5 = new XMLHttpRequest(); // No Internet Explorer
  6.     else
  7.         ajax5 = new ActiveXObject("Microsoft.XMLHTTP"); // Internet Explorer
  8.  
  9.     // Almacenamos en el control al funcion que se invocara cuando la peticion
  10.     // cambie de estado
  11.     ajax5.onreadystatechange = funcionCallback5;
  12.  
  13.     // Enviamos la peticion
  14.         if(TIPO=='I')
  15.             {
  16.                 confirmar = confirm('Desea Inactivar al Empleado ' + EMPNUM + '?');
  17.                 if(confirmar==true)
  18.                     {
  19.                         ajax5.open( "GET", "ActEmpSie.jsp?SIENUM="+document.all.txt_siembra.value+"&EMPNUM="+EMPNUM +"&TIPO="+TIPO, true );
  20.                         ajax5.send( "" );
  21.                     }
  22.             }
  23.             else
  24.                 {
  25.                     confirmar = confirm('Desea Activar Nuevamente al Empleado ' + EMPNUM + '?');
  26.                     if(confirmar==true)
  27.                         {
  28.                             ajax5.open( "GET", "ActEmpSie.jsp?SIENUM="+document.all.txt_siembra.value+"&EMPNUM="+EMPNUM +"&TIPO="+TIPO, true );
  29.                             ajax5.send( "" );
  30.                         }
  31.                 }
  32. }

Ojala me pudieran ayudar como lo hicieron antes.

Muchas Gracias de Antemano...
  #8 (permalink)  
Antiguo 30/08/2010, 08:26
Avatar de lukos  
Fecha de Ingreso: enero-2008
Ubicación: ikikin
Mensajes: 22
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Crear DataGrid en JSP

Ps la verdad es que leyendo de buenas a primeras no entiendo
Pero, suponiendo que tienes un id=5, debería salirte 5 no? Entonces qué valor te sale? Puede ser que estes tomando mal el índice. O en la iteración, o en la generación del XML

Podrías tirarte un ejemplo con valores
  #9 (permalink)  
Antiguo 01/09/2010, 09:10
 
Fecha de Ingreso: agosto-2009
Mensajes: 10
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Crear DataGrid en JSP

Buenas ya resolví el asunto, muchas gracias por toda la ayuda que me han brindado, el asunto era una cuestion de comillas, por dicha era eso.

De nuevo gracias!!!
  #10 (permalink)  
Antiguo 01/09/2010, 10:47
 
Fecha de Ingreso: agosto-2009
Mensajes: 10
Antigüedad: 14 años, 9 meses
Puntos: 0
Desacuerdo Respuesta: Crear DataGrid en JSP

Mmmm que mal, ahora es otro problema,

Cuando llamo al método que crea el XML la primera vez funciona correctamente, pero despues que actualizo los datos en la BD, la página no actualiza la información cuando llamo el método de nuevo, será que me falta algo y no lo se aun?

METODOS AJAX

Código PHP:
Ver original
  1. <script>
  2.  
  3. function funcionCallback4()
  4. {
  5.     // Comprobamos si la peticion se ha completado (estado 4)
  6.     if( ajax4.readyState == 4 )
  7.     {
  8.         // Comprobamos si la respuesta ha sido correcta (resultado HTTP 200)
  9.  
  10.         //if( ajax4.status == 200 )
  11.         //{
  12.             // Escribimos el resultado en la pagina HTML mediante DHTML
  13.             //document.all.grid_COSE041.innerHTML = "<b>"+ajax4.responseText+"</b>";
  14.  
  15.  
  16.                         try
  17.                         {
  18.                         document.all.lbl_Mensaje.innerHTML ="";
  19.                         var xml = ajax4.responseXML;
  20.                         var i=0;
  21.                         var cant = xml.getElementsByTagName('EMPNUM').length;
  22.                         var respuesta;
  23.                         if(tip=='A')
  24.                             {
  25.                                 respuesta = "<table id=\"COSE041\" border=2><thead><tr><th>INACTIVAR</th><th>FOLIO</th><th>NOMBRE</th>"+
  26.                                     "</thead><tbody>";
  27.                         }
  28.                         else
  29.                             {
  30.                                 respuesta = "<table id=\"COSE041\" border=2><thead><tr><th>ACTIVAR</th><th>FOLIO</th><th>NOMBRE</th>"+
  31.                                     "</thead><tbody>";
  32.                             }
  33.                         var semiresp;
  34.                         for(i=0;i<cant;i++)
  35.                         {
  36.                             var resp = "<tr>";
  37.                             var id = xml.getElementsByTagName('EMPNUM').item(i).getAttribute('id');
  38.                             if(tip=='A')
  39.                             {
  40.                                 resp = resp + "<td><img alt=Consultar  src=imagenes/equis.png onClick=activar('" + id + "','I');></td>";
  41.                             }
  42.                             else
  43.                             {
  44.                                 resp = resp + "<td><img alt=Consultar  src=imagenes/cambiar.png onClick=activar('" + id + "','A');></td>";
  45.                             }
  46.                             resp = resp + "<td>"+ id + "</td>";
  47.                             resp = resp + "<td>"+ xml.getElementsByTagName('EMPNOM')[i].firstChild.data + "</td>";
  48.  
  49.                             resp = resp + "</tr>";
  50.                             if (i==0)
  51.                             {
  52.                                 semiresp = resp;
  53.                             }
  54.                             else
  55.                             {
  56.                                 semiresp = semiresp + resp;
  57.                             }
  58.                         }
  59.                 }
  60.                 catch(e)
  61.                 {
  62.                     alert(e.toString());
  63.                 }
  64.  
  65.                 document.all.lbl_Mensaje.innerHTML = respuesta + semiresp + "</tboby></table>";
  66.         //}
  67.     }
  68. }
  69.  
  70. function grid_COSE041(TIPO)
  71. {
  72.     // Creamos el control XMLHttpRequest segun el navegador en el que estemos
  73.     if( window.XMLHttpRequest )
  74.         ajax4 = new XMLHttpRequest(); // No Internet Explorer
  75.     else
  76.         ajax4 = new ActiveXObject("Microsoft.XMLHTTP"); // Internet Explorer
  77.  
  78.     // Almacenamos en el control al funcion que se invocara cuando la peticion
  79.     // cambie de estado
  80.     ajax4.onreadystatechange = funcionCallback4;
  81.         tip = TIPO;
  82.     // Enviamos la peticion
  83.         ajax4.open( "GET", "gridCOSE041.jsp?SIENUM="+document.all.txt_siembra.value+"&TIPO="+TIPO, true);
  84.         ajax4.send( "" );
  85. }
  86.  
  87. </script>

CREO XML

Código PHP:
Ver original
  1. <%@page contentType="text/xml" pageEncoding="UTF-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  3.    "http://www.w3.org/TR/html4/loose.dtd">
  4.  
  5. <%
  6.     HttpSession sesion = request.getSession();
  7.     String id_usuario = (String)sesion.getAttribute("id_usuario");
  8.     String password = (String)sesion.getAttribute("password");
  9.     String SIENUM = request.getParameter("SIENUM");
  10.     String TIPO = request.getParameter("TIPO");
  11.     Acceso acceso = new Acceso();
  12.     String respuestaXML;
  13.     respuestaXML = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>";
  14.     String cadena = "";
  15.     if(TIPO.equals("A"))
  16.         {
  17.            // Este metodo me devuelve el resultado de la sentencia SQL
  18.             cadena = acceso.grid_COSE041(SIENUM, id_usuario, password);
  19.         }
  20.     else
  21.         {
  22.             // Este metodo me devuelve el resultado de la sentencia SQL
  23.             cadena = acceso.grid_COSE041A(SIENUM, id_usuario, password);
  24.         }
  25.     String cuerpo ="";
  26.     String respuesta = "";
  27.         Boolean v=true;
  28.         try{
  29.             String [] temp = cadena.split("@");
  30.             for (String algo : temp){
  31.                 String [] temp1 = algo.split("#");
  32.                 if (v) {
  33.                     cuerpo ="<EMPNUM id=\""+temp1[0]+"\"><EMPNOM>"+temp1[1]+"</EMPNOM>" + "</EMPNUM>";
  34.                     v=false;
  35.                 }else{
  36.                     cuerpo =cuerpo + "<EMPNUM id=\"" + temp1[0] + "\"><EMPNOM>"+temp1[1].trim() + "</EMPNOM>" + "</EMPNUM>";
  37.                 }
  38.             }
  39.             respuesta = "<COSE041>" + cuerpo + "</COSE041>";
  40.         }catch(Exception e){
  41.             respuestaXML = e.toString();
  42.         }
  43.         out.print(respuestaXML + respuesta);
  44. %>

Disculpen las molestias
  #11 (permalink)  
Antiguo 06/09/2010, 00:55
 
Fecha de Ingreso: enero-2010
Ubicación: Iquique
Mensajes: 16
Antigüedad: 14 años, 4 meses
Puntos: 1
Respuesta: Crear DataGrid en JSP

Hombre ninguna molestia!
Ps puedes usar un timer para ir actualizando cada cierto tiempo la tabla.
Agregas esto:
Código Javascript:
Ver original
  1. var idTimer;
  2. function timer(){
  3.     oXML = AJAXCrearObjeto();
  4.     oXML.open("GET", "gridCOSE041.jsp?SIENUM="+document.all.txt_siembra.value+"&TIPO="+TIPO",true);
  5.    oXML.onreadystatechange=leePendientes;    
  6.    oXML.send(null);
  7.    this.idTimer = setTimeout('timer();',10000);
  8. }
  9. //En este caso 10000 son 10 segundos.
Y ps la llamas desde el onLoad del body ;)

Etiquetas: datagrid, jsp
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:17.