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

Crear Combobox en JSP que tome valores de MySQL, ayuda!

Estas en el tema de Crear Combobox en JSP que tome valores de MySQL, ayuda! en el foro de Java en Foros del Web. Hola amigos, recien estoy desarrollando un pequeño sistema en JAVA (JSP para ser especifico) con una base de datos MySQL, y estoy teniendo problemas para ...
  #1 (permalink)  
Antiguo 28/04/2009, 10:26
Avatar de saman0suke  
Fecha de Ingreso: abril-2009
Mensajes: 180
Antigüedad: 15 años
Puntos: 3
Crear Combobox en JSP que tome valores de MySQL, ayuda!

Hola amigos, recien estoy desarrollando un pequeño sistema en JAVA (JSP para ser especifico) con una base de datos MySQL, y estoy teniendo problemas para realizar un combobox que tome dos atributos de una tabla (id_nacionalidad, nombre) pero que solo almacene uno, es decir quiero visualizar el nombre del pais, pero que se guarde el id de este, y no se como realizarlo, he buscado en google pero no encuentro un ejemplo ilustrativo, podrian ayudarme por favor? realmente es de las pocas cosas que me hacen falta, y un ejemplo claro me ayudaria bastante, soy un novato en JAVA asi que una explicacion clara o un codigo de ejemplo seria grandioso, gracias de antemano a todos, un saludo!
  #2 (permalink)  
Antiguo 29/04/2009, 09:58
 
Fecha de Ingreso: febrero-2009
Mensajes: 55
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Crear Combobox en JSP que tome valores de MySQL, ayuda!

Cita:
Iniciado por saman0suke Ver Mensaje
...combobox que tome dos atributos de una tabla (id_nacionalidad, nombre) pero que solo almacene uno, es decir quiero visualizar el nombre del pais, pero que se guarde el id de este...
Mencionas que usas JSP pero no mencionas si usas servlets, sí ese fuera el caso:
Antes de desplegar tú jsp:
  • Obtener los datos de la base de datos (id_nacionalidad, nombre)
  • Guardar dicha información en dos arreglos, lists o lo que se te ocurra
  • Mandar dicha información al jsp mediante request.setAttribute

Dentro de tu jsp:
  • Obtener la información enviada por el servlet
  • Iterar los arreglos o lists para generar el código del drop-list
  • Seguir con la lógica de negocio que tienes que implementar

Creo que lo mas importante esta en el jsp:
Código:
<%
String arreglo1=(String) request.getAttribute("id"); //id puede ser modificado (al igual que "arreglo1") por cualquier variable de tú elección
String arreglo2=(String) request.getAttribute("nombre"); //nombre puede ser modificado (al igual que "arreglo2") por cualquier variable de tú elección
String opciones="";
for (int i=0;i<arreglo1.length;i++)
{
opciones="<option value="+arreglo1+">"+arreglo2+"</option>";
//Observar que los ids van en "value" y que los nombres va antes del ">" y después del "</option>"
}
%>
......
<!--Código de tu jsp--!>
<select name="Select1">
<%=opciones%>
</select></form>
<!--Continua tu código o lógica de negocio--!>

Esta es una manera que se me ocurrió, aunque la verdad tengo curiosidad acerca de sí se puede hacer atraves del doGet u otra forma.

Editado:
Esta solución es suponiendo que siempre existira info en la base de datos acerca de los id_nacionalidad y nombre, si se da el caso de que no exista info se tiene que modificar el código para tomar en cuenta nulos.

PD: Para guardar los id_nacionalidad en la base de datos solo se hace en el servlet:
String id_seleccionado=(String) request.getParameter("Select1");

Última edición por RAVA; 29/04/2009 a las 10:03 Razón: Se agrego mas info
  #3 (permalink)  
Antiguo 29/04/2009, 10:02
 
Fecha de Ingreso: febrero-2009
Mensajes: 55
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Crear Combobox en JSP que tome valores de MySQL, ayuda!

Mensaje eliminado.

Última edición por RAVA; 29/04/2009 a las 10:03 Razón: La lie.
  #4 (permalink)  
Antiguo 29/04/2009, 17:51
Avatar de saman0suke  
Fecha de Ingreso: abril-2009
Mensajes: 180
Antigüedad: 15 años
Puntos: 3
Respuesta: Crear Combobox en JSP que tome valores de MySQL, ayuda!

En efecto, no estoy trabajando con Servlets, en realidad estoy haciendo en clases y JSP (javabean), mis conocimientos son bastante basicos, y he logrado que en la lista se muestre la nacionalidad, pero se guarde el id, sin embargo solo me muestra el primer pais de la lista, y los demas no, me gustaria que por favor revisaran el codigo y me dijeran si estoy haciendo algo mal :


clase java:
Código:
package datos;

import beans.Nacionalidad;
import java.sql.*;

public class Combobox_nacionalidad {
    Connection canal = null;

    public Combobox_nacionalidad() {
        cargardriver();
        conectarbd();
    }

    public void cargardriver() {
try {
          Class.forName("com.mysql.jdbc.Driver");
          System.out.println("La Carga de Driver ha sido Satisfactoria...");
        } catch (Exception e) {
          System.out.println("Error en metodo CargarDriver()...");
        }
    }

    public void conectarbd() {
        try {
            canal = DriverManager.getConnection("jdbc:mysql://localhost:3306/prueba_invesa", "root", "");
            System.out.println("Conexion Satisfactoria...");
        } catch(SQLException e) {
            e.printStackTrace();
        }
    }

    public Nacionalidad Listarprocedencia(Nacionalidad nacionalidad) {

        PreparedStatement instruccion=null;
        ResultSet resultado=null;

        conectarbd();

        try{
            String sSql = "";
            sSql = sSql + "select id_nacionalidad, Nombre from prueba_invesa.nacionalidad";

            instruccion = canal.prepareStatement(sSql);

            resultado=instruccion.executeQuery();

            nacionalidad = new Nacionalidad();
            while (resultado.next()) {
                nacionalidad.setId_nacionalidad(resultado.getString(1));
                nacionalidad.setNOmbre(resultado.getString(2));

break;
            }
    }
        catch(Exception e) {
            e.printStackTrace();
        } finally{
            try {
               if (resultado != null) resultado.close();
               if (instruccion != null) instruccion.close();
            } catch (SQLException ex) {
            }
        }

        return nacionalidad;
        }

    }
archivo jsp(solo incluyo los codigos JAVA)
Código:
<jsp:useBean id="nacionalidad" scope="request"  class="beans.Nacionalidad"/>
<jsp:useBean id="combocaja"  scope="session"  class="datos.Combobox_nacionalidad_1"/>

<%
        String id_nacionalidad = nacionalidad.getId_nacionalidad();
        String Nombre = nacionalidad.getNOmbre();

        nacionalidad.setId_nacionalidad(id_nacionalidad);
        nacionalidad.setNOmbre(Nombre);

        nacionalidad=combocaja.Listarprocedencia();
        %>

<select name="NACIONALIDAD" id="NACIONALIDAD">
            <option>Seleccione nacionalidad</option>
            <option value="<%=nacionalidad.getId_nacionalidad() %>"><%=nacionalidad.getNOmbre() %></option>
        </select>
Como les repito, solo me muestra el primer dato de pais en el select, y funciona, pero me gustaria que los desplegara todos, ¿podrian ayudarme? se que existen otras formas de hacerlo, pero me gustaria me ayudaran a hacer funcionar esta, y si de hecho no hay forma con este codigo (cosa que no creo,porque muestra siquiera un valgo) pues gracias de antemano, un saludo.
  #5 (permalink)  
Antiguo 30/04/2009, 16:12
 
Fecha de Ingreso: abril-2009
Mensajes: 82
Antigüedad: 15 años
Puntos: 2
Respuesta: Crear Combobox en JSP que tome valores de MySQL, ayuda!

Buenas:

A ver si te puedo echar una mano. El problema reside en dos puntos que tendrás que cambiar, según lo veo.
  1. En la función ListarProcedencia, obtienes un único elemento de los resultados devueltos de la BD, que es el que envías (de ahi que solo veas un elemento en el combo). Así, tendrías que recuperar todas las nacionalidades y que la función te devuelva una lista con esas nacionalidades.
  2. En el JSP, solo imprimes un único elemento. Ahora tendrías que recuperar la lista antes de introducir el elemento e iterar sobre ésta, introduciendo un option por cada elemento de la lista (otra opcion es emplear un tag que te genere todos los option a partir de una lista, vease options)

O lo que es lo mismo:
Código:
    public List<Nacionalidad> Listarprocedencia(Nacionalidad nacionalidad) {

        PreparedStatement instruccion=null;
        ResultSet resultado=null;
        List<Nacionalidad> nacionalidades = new ArrayList<Nacionalidad>();

        conectarbd();

        try{
            String sSql = "";
            sSql = sSql + "select id_nacionalidad, Nombre from prueba_invesa.nacionalidad";

            instruccion = canal.prepareStatement(sSql);

            resultado=instruccion.executeQuery();

            
            while (resultado.next()) {
                nacionalidad = new Nacionalidad();
                nacionalidad.setId_nacionalidad(resultado.getString(1));
                nacionalidad.setNOmbre(resultado.getString(2));
                nacionalidades.add(nacionalidad);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            try {
               if (resultado != null) resultado.close();
               if (instruccion != null) instruccion.close();
            } catch (SQLException ex) {
            }
        }

        return nacionalidades;
        }
Y en el caso del JSP:

Código:
<%
        List<Nacionalidad> nacionalidades = ListarProcedencia();
%>

         <select name="NACIONALIDAD" id="NACIONALIDAD">
            <option>Seleccione nacionalidad</option>
            <% for (Nacionalidad nacionalidad : nacionalidades) { %>
            <option value="<%=nacionalidad.getId_nacionalidad() %>"><%=nacionalidad.getNOmbre() %></option>
            <% } %>
        </select>

Espero que te sirva de ayuda (y que esté correcto ;))

Saludos.
  #6 (permalink)  
Antiguo 30/04/2009, 21:16
Avatar de saman0suke  
Fecha de Ingreso: abril-2009
Mensajes: 180
Antigüedad: 15 años
Puntos: 3
Respuesta: Crear Combobox en JSP que tome valores de MySQL, ayuda!

Gracias por la ayuda, voy a probarlo y vere que pasa, un saludo :D
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 20:58.