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

Combos dependientes en JSP

Estas en el tema de Combos dependientes en JSP en el foro de Java en Foros del Web. Buenas a todos, espero que esten teniendo un buen día y sin aburrirlos más voy directo al grano, resulta que estoy haciendo una aplicación web ...
  #1 (permalink)  
Antiguo 24/03/2015, 07:47
Avatar de oshho  
Fecha de Ingreso: marzo-2015
Mensajes: 40
Antigüedad: 9 años, 1 mes
Puntos: 0
Combos dependientes en JSP

Buenas a todos, espero que esten teniendo un buen día y sin aburrirlos más voy directo al grano, resulta que estoy haciendo una aplicación web con JSP, dentro de esta aplicación tengo 2 combobox, 1 combobox carga una lista desde una base de datos, y el segundo combobox debería hacer lo mismo, pero basado en la selección del primer combobox. (Un ejemplo muy común de esto es clasico par de combos "País" y "Ciudad" en el que el segundo solo cargaría las ciudades del país seleccionado)

Bueno a continuación le dejo le codigo de mi JSP, he buscado mucho y bueno he encontrado muchos tutoriales en el que usan Javascript, y apesar de seguirlos al pie de la letra nunca me resulta (Cabe aclarar que jamás en mi vida e usado javascript) otros proponen el uso de AJAX pero nisiquiera se implementarlo ahaha, bueno, les dejo mi codigo para ver si me pueden brindar su ayuda n,n

Código Java:
Ver original
  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5.         <title>Eliminar Métricas</title>
  6.     </head>
  7.     <body>
  8.         <form name="frmEliminar" method="POST" id="frm_del">
  9.             <table style=" border: 0px; font-family: Verdana; background-color: gainsboro;
  10.                   font-size: 12px; text-align: left; box-shadow: black 0px 1px 10px 0px">
  11.                 <tbody>
  12.                     <tr>
  13.                         <td>Nombre de Aplicación</td>
  14.                         <td><select style="width: 317px" id="cmbAN" name="cmbApplicationName">
  15.                                 <option value="">--Seleccione--</option>
  16.                         <!-- Carga el combobox/drop-down list con las posibles aplicaciones -->
  17.                                 <%for(Application appl: new dao.ApplicationDao().listarAplicaciones()){%>
  18.                                 <option value="<%= appl.getIdApplication() %>"><%= appl.getNameApplication()%></option>
  19.                                 <% } %>
  20.                             </select>
  21.                         </td>
  22.                     </tr>
  23.                     <tr>                      
  24. // HASTA AQUÍ NO TENGO PROBLEMAS, PERO NECESITO CARGAR LA INFO DE ESTE COMBO, BASANDOSE EN LA SELECCIÓN DEL COMBO ANTERIOR
  25.                         <td>Nombre de Transacción</td>
  26.                             <td><select  id="cmbTN" name="cmbTransactionName">
  27.                                 <option value="">--Seleccione--</option>
  28.                                 <option value=""></option>
  29.                             </select></td>
  30.                     </tr>
  31.                 </tbody>
  32.             </table>
  33.             <br>
  34.             <input type="submit" value="BUSCAR" name="btnBuscar" /> <input type="submit" value="ELIMINAR" name="btnEliminar" />
  35.         </form>
  36.     </body>
  37. <html>

Este es el codigo de mi clase ApplicationDao (La cual contiene la query)
Código Java:
Ver original
  1. // Crea y devuelve una lista (ArrayList) con la ID y nombre de las aplicaciones.
  2.     public static ArrayList<Application> listarAplicaciones(){
  3.         ArrayList<Application> aplicaciones = new ArrayList<Application>();
  4.         Connection conexion = Conexion.getConexion();
  5.         try {
  6.             String query = " USE SyntheticMonitoring "
  7.                     + "SELECT ApplicationID, ApplicationName "
  8.                     + "FROM Applications";
  9.             PreparedStatement listar = conexion.prepareStatement(query);
  10.             ResultSet rs = listar.executeQuery();
  11.             while(rs.next()){
  12.                 Application aplicacion = new Application();
  13.                 aplicacion.setIdApplication(rs.getInt("ApplicationID"));
  14.                 aplicacion.setNameApplication(rs.getString("ApplicationName"));
  15.                 aplicaciones.add(aplicacion);
  16.             }
  17.            
  18.        } catch (SQLException ex) {
  19.             out.println("<!DOCTYPE html>");
  20.             out.println("<html>");
  21.             out.println("<head>");
  22.             out.println("<title>Error Exception</title>");            
  23.             out.println("</head>");
  24.             out.println("<body>");
  25.             out.println("<h1>SQLException "+ ex +"</h1>");
  26.             out.println("</body>");
  27.             out.println("</html>");
  28.         } catch (Exception ex) {
  29.             out.println("<!DOCTYPE html>");
  30.             out.println("<html>");
  31.             out.println("<head>");
  32.             out.println("<title>Error Exception</title>");            
  33.             out.println("</head>");
  34.             out.println("<body>");
  35.             out.println("<h1>Exception "+ ex +"</h1>");
  36.             out.println("</body>");
  37.             out.println("</html>");
  38.         }
  39.         return aplicaciones;
  40.     }


Esta es la clase TransactionDao donde tengo la query de las transacciones (La que pide la ID de aplicación como parametro) *Nota: no se si debería tener este metodo como "estatico" aunque no se si esto afecta negativamente la carga del cmb"

Código Java:
Ver original
  1. public static ArrayList<Transaction> listarTransacciones(int appID){
  2.         ArrayList<Transaction> trans = new ArrayList<Transaction>();
  3.         Connection conexion = Conexion.getConexion();
  4.         try {
  5.             String query = " USE SyntheticMonitoring "
  6.                     + "SELECT TransactionID, TransactionName "
  7.                     + "FROM Transactions "
  8.                     + "WHERE ApplicationID = ?";
  9.             PreparedStatement listar = conexion.prepareStatement(query);
  10.             listar.setInt(1, appID);
  11.             ResultSet rs = listar.executeQuery();
  12.             while(rs.next()){
  13.                 Transaction transaccion = new Transaction();
  14.                 transaccion.setIdTransaction(rs.getInt("TransactionID"));
  15.                 transaccion.setNameTransaction(rs.getString("TransactionName"));
  16.                 trans.add(transaccion);
  17.                
  18.             }
  19.            
  20.        } catch (SQLException ex) {
  21.             out.println("<!DOCTYPE html>");
  22.             out.println("<html>");
  23.             out.println("<head>");
  24.             out.println("<title>Error Exception</title>");            
  25.             out.println("</head>");
  26.             out.println("<body>");
  27.             out.println("<h1>SQLException "+ ex +"</h1>");
  28.             out.println("</body>");
  29.             out.println("</html>");
  30.         } catch (Exception ex) {
  31.             out.println("<!DOCTYPE html>");
  32.             out.println("<html>");
  33.             out.println("<head>");
  34.             out.println("<title>Error Exception</title>");            
  35.             out.println("</head>");
  36.             out.println("<body>");
  37.             out.println("<h1>Exception "+ ex +"</h1>");
  38.             out.println("</body>");
  39.             out.println("</html>");
  40.         }
  41.         return trans;
  42.     }

Aquí una fotito de lo que quiero hacer hahaha ( Explicado con manzanas ahhaha )
No es necesario hacer exactamente lo que tenía planeado con el Onchange, pero si obtener el mismo resultado :c


Bueno chicos, espero que puedan ayudarme con esto, ya que no soy muy experto en el tema, agradecería cualquier ayuda, muchas gracias n-n

Última edición por oshho; 24/03/2015 a las 08:04
  #2 (permalink)  
Antiguo 24/03/2015, 08:08
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Combos dependientes en JSP

Si has visto tutoriales donde usan javascript (AJAX o JQuery) es porque debes hacerlo así.

Una jsp genera un html en el servidor y se le pasa al navegador, así que el hecho de que tú elijas un valor en el primer combo desde el navegador, al servidor no le importa, ni siquiera se entera.

La alternativa es que al escoger un valor en el primer combo hagas un submit del formulario al servidor, pero esto es una forma muy mala de resolverlo ya que implica recargar la página al completo, por eso se usa javascript, porque javascript se ejecuta en el navegador y permite modificar o pedir al servidor sólo una parte de la página.

Vuelve a intentarlo con esos tutoriales, es la mejor solución.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 24/03/2015, 08:17
Avatar de oshho  
Fecha de Ingreso: marzo-2015
Mensajes: 40
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Combos dependientes en JSP

Cita:
Iniciado por Xerelo Ver Mensaje
Si has visto tutoriales donde usan javascript (AJAX o JQuery) es porque debes hacerlo así.

Una jsp genera un html en el servidor y se le pasa al navegador, así que el hecho de que tú elijas un valor en el primer combo desde el navegador, al servidor no le importa, ni siquiera se entera.

La alternativa es que al escoger un valor en el primer combo hagas un submit del formulario al servidor, pero esto es una forma muy mala de resolverlo ya que implica recargar la página al completo, por eso se usa javascript, porque javascript se ejecuta en el navegador y permite modificar o pedir al servidor sólo una parte de la página.

Vuelve a intentarlo con esos tutoriales, es la mejor solución.
Muchas gracias por la respuesta, bueno viendo un tutorial terminé haciendo esto.
(La función se ejecuta por medio del evento "onchange" que añadí en el cmbApplicationName

Código Javascript:
Ver original
  1. <head>
  2.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  3.         <!--Funcion javascript para la carga del combobox/drop-down list de transacciones -->
  4.         <script type="text/javascript" src="js/jquery-1.11.2.min.js" ></script>
  5.         <script type="text/javascript">
  6.             function cargarCTN(){
  7.                 $.post("sel_tran.jsp",$("#frmEliminar").serialize(),
  8.                 function(frm_del){$("#cmbTransactionName").html(frm_del);});
  9.             }
  10.         </script>
  11.        
  12.        
  13.        
  14.         <title>Eliminar Métricas</title>
  15.     </head>

Por lo que tuve que crear el siguiente JSP llamado (sel_tran.jsp)
Código Javascript:
Ver original
  1. <%@page import="dto.Transaction"%>
  2. <%@page import="dao.TransactionDao"%>
  3.  
  4. <% int appID = Integer.parseInt(request.getParameter("cmbApplicationName")); %>
  5.  
  6. <select name="cmbTransactionName">
  7.     <option value="">--Seleccione--</option>
  8.     <%for(Transaction trans: new dao.TransactionDao().listarTransacciones(appID)) {%>
  9.     <option value="<%= trans.getIdTransaction() %>"><%= trans.getNameTransaction() %></option>
  10.     <% } %>
  11. </select>

En el tutorial que ví le fue perfecto, pero el creaba las querys dentro del mismo JSP, y bueno esto pierde la estructura que estoy usando es por ello que intente cargar el combo de la misma manera de como cargué el anterior, pero aún no se a que se debe que no me funcione :(
  #4 (permalink)  
Antiguo 24/03/2015, 10:51
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Combos dependientes en JSP

¿Y qué es lo que sale? Revisa el html generado, te puede dar una idea.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.

Etiquetas: clase, combos, dependientes, jsp, sql, string
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 11:01.