Inicio > JSP, Java, Linux, NetBeans, PostgreSQL, Programacion, Tutoriales > Tutorial:Combos dependientes con JSP, Ajax y Postgresql en Netbeans

Tutorial:Combos dependientes con JSP, Ajax y Postgresql en Netbeans

Hola otra vez por aqui retomando el blog despues de un largo receso, como comprenderan con la familia y el trabajo se nos hace dificil a veces publicar algun post, pero bueno manos a la obra.

Este post es ha solicitud de unos compañeros que estan aprendiendo a trabajar con jsp, ajax y postgresql y necesitaban alguna guía práctica para trabajar la parte del llenado de combos de forma dependiente justamente utilizando ajax y obteniendo la data desde una base de datos.

Bueno, lo primero que debemos tener en cuenta es la estructura de tablas en la base de datos desde donde obtendremos la informacion. Para este ejemplo tome como ejemplo la siguiente estructura.

tablascomo podemos observar la base de datos se llama bd_tutorial y las tablas serian productos y detalle_producto respectivamente.

Una vez creado las tablas, ahora lo que hacemos es crear nuestro proyecto web al cual llamaremos webapp_ajaxDemo y comenzar armar nuestra estructura de archivos jsp, javascript y clases java, las cuales accederan a la informacion de la base de datos. Creamos el proyecto y generamos la siguiente estructura propuesta:

proyectoAhora, lo que haremos sera ver como obtener la informacion de la base de datos, para esto vamos a trabajar nuestras clases java empezando por los beans en donde almacenaremos la informacion  y terminando por las clases  DAO , las cuales seran las que recogeran la informacion de la base de datos.  Lo primero es tener la estructura de los archivos productoBean.java y detalleProductoBean.java, mas o menos seria la siguiente:

producto1

detalleproducto

Una vez detallada la clases Bean, ahora nos enfocamos en las clase BO y DAO, yo siempre hago esta distribucion para tener en cuenta el manejo de capas, esto ayuda mucho. Ahora veremos la estructura de la clase productoBo.java, aqui es donde definiremos los metodos que tendran acceso a los métodos de las clase DAO.

productobo

Los métodos que usaremos getProducto y getDetalleProducto los cuales nos devuelven como resultado un ArrayList de Beans esto con la finalidad de poder tener toda la informacion y poder seleccionar lo necesario. Ademas hacen referencia a métodos de las clases DAO la cuales ya tenemos definidas.

Ahora, veremos las estructuras y codificacion de las clases  que obtienen la información de la BD productoDao.java y detalleProductoDao.java respectivamente:

Para las clases productoDao.java y detalleProductoDao.java, por cuestiones de espacio solo estoy mostrando los métodos que acceden a la información, se asume que ustedes ya tienen definido los métodos de conexion y desconexion respectivamente.

productoDao.java:

productodao

detalleProductoDao.java:

detalleproductodao

Una vez ya completada la estructura y codificacion de las clases java, ahora pasaremos a codificar las paginas JSP, lo primero que haremos sera mostrar el primer combo que serian los productos, para esto mostraremos una parte de la codigo del archivo index.jsp la cual sufrira alguna moficiacion mas adelante, por el momento tenemos lo siguiente:

combo_1

Fijemos en los recuadros de color rojo, en el primer recuadro lo que hago es importar la clase productoBo y productoBean, dado que en el primero se tiene el metodo que obtendria la informacion de los productos, y en el segundo recuadro es donde muestro los productos los cuales son almacenados en beans del tipo productoBean por eso la declaracion en el primer recuadro.

Deben tener en cuenta que en la linea de código en donde muestro el detalle del producto en la opcion value el combo se esta poniendo el id del producto, esto para que cuando mandemos el producto se tome el id para poder realizar la busqueda en el detalle y no el nombre del producto.

Ahora veremos la parte de AJAX, para esto tenemos un archivo javascript ajax_producto.js en el cual tendremos el siguiente código:

ajax_producto1

Vemos que estamos declarando la funcion getDetalleProducto al cual le estamos enviando como parametro id_pro, luego en la parte mas abajo vemos que hacemos la referencia a la pagina ajax_detalleProducto.jsp, que en la que recuperaremos la informacion de la tabla de detalles enviando como parametro el id_pro y ademas un identificador para hacer refresco a nuestras busquedas, esto por un problema en algunos navegadores con el manejo de su cache. Y la funcion resultado_detalle que es donde le indicamos donde mostrarnos el resultado.

Fijarse bien en esto ultimo ya que como veran estamos utilizando el identificador del elemento en donde pondremos el resultado que para este caso es result_detalle.

una vez terminado esto lo que haremos sera codificar la pagina que obtendra la informacion del detalle de producto, que en este caso es ajax_detalleProducto.jsp

detalle_ajax

Ahora solo nos queda adecuar la pagina index.jsp para que pueda hacerse la invocación, mostraremos el codigo segmentado por cuestiones de espacio.

index_1

En este primer segmento, podemos ver que aqui se hace la llamada a la libreria javascript ajax_producto.js la cual contiene a la función getDetalleProducto, fijense en el evento onchange del combo, alli es donde llamamos a la funcion que retornaria la informacion del detalle.

Ahora para el segundo segmento vemos el id=”result_detalle” que es el identificador que se utiliza para mostrar el combo con el detalle.

index_2Y practicamente esto seria todo. Se debe tener en cuenta que esto se hizo de forma rápida solo para cuestiones de enseñanza, esto se puede mejorar notablemente tal vez utilizando algun framework como jQuery o mejorando el código propuesto. Espero les sea de utilidad para algunos que recien empiezan con esto

PD: Los errores ortográficos son aproposito.

Descarga el ejemplo: webapp_ajaxDemo (Ejemplo modificado para trabajar con 3 combos)

  1. El aprendiz
    Abril 23, 2009 a las 10:54 am | #1

    El tutorial es muy bueno pero si es que van ayudar es mejor que lo hagan bien porque no tambien poner el proyecto en un archivo comprimido para poder bajarlo, como va a decir

    PD: Los errores ortográficos son aproposito

    esto puede ocacionar confuncion ya que a la hora de “provar” el “tutorial”

    si van ayudar que lo hagan bien y si no mejor no hacerlo

  2. nachxs
    Abril 23, 2009 a las 11:39 am | #2

    Hola aprendiz, bueno tomare en cuenta lo que dices de colocar el archivo comprimido en un servidor hosting para que puedan descargarlo, ya que no cuento con uno propio.

    Con respecto al PD no entiendo en que te pueda confundir, yo siempre coloco esta frase porque considero que los usuarios que leen el tutorial ven el fondo de la información y a veces se nos pasa una que otra palabra(s) a la que le falte talvez una tilde o este mal escrita.

    Ahora cuando dices “si van ayudar que lo hagan bien y si no mejor no hacerlo”, yo te pregunto a ti, te ayudo el tutorial??
    Si fuera asi, no es mas facil decir “bueno gracias por la ayuda, pero te aconsejo que mejores tu ortografia”.

    El unico consejo que puedo dar, es que debes aprender a valorar el esfuerzo y tiempo que se toman las personas para poder trasmitir conocimiento sobre un tema a los que no lo tienen o lo necesitan.

    De todos modos agradezco tu tiempo para leer el blog.

    Saludos.

  3. Camilo
    Abril 28, 2009 a las 9:53 am | #3

    Buen Dia, Me gusto mucho el tutorial, me parece que tiene las cosas esenciales que se necesitan para aprender a manejar JSP, sin embargo para los que somos nuevos en el tema nos quedan dudas y no se si fuese posible que se publicara el codigo fuente de esta actividad, con el fin de realizar una comparacion con lo que realicem haber en donde cometi el error ya que no logre hacer funcionar la pagina.

    Gracias

    • nachxs
      Abril 28, 2009 a las 10:20 am | #4

      Hola Camilo, si claro de todas maneras estoy planeando subir estos ejemplos a un hosting, como menciones en un comentario anterior no dispongo de uno propio, pero en todo caso te estoy enviando el ejemplo a tu correo para que lo puedas revisar.

      Saludos.

  4. Marian
    Mayo 5, 2009 a las 6:18 am | #5

    ¡¡Muchísimos millones de gracias!! Estaba buscando exactamente un ejemplo como este (siempre los encontraba con php), lo único que he tenido que cambiar es la base de datos (a MySQL) y ahora me pelearé para hacer 7 combos dependientes. Gracias de nuevo por el tutorial tan claro y por poder descargar el proyecto para netbeans.

    Saludos

  5. Marian
    Mayo 6, 2009 a las 3:34 am | #6

    Hola de nuevo,

    He probado con 3 combos y no soy capaz de montarlos, ¿tienes algún ejemplo? ¿Podrías ayudarme?

    Gracias.

    Un saludo.

  6. Geovanny
    Mayo 6, 2009 a las 9:47 pm | #7

    Que tal, muy interesante el ejemplo, lo mejor de todo es que lo tienes en jsp casi no hay referencias del mismo; te agradezco mucho me ayudes con el código del ejemplo ya que el link no se encuentra disponible.

    Saludos,

    GTOMALA.
    GYQ. – ECU.

  7. Fernanda
    Mayo 14, 2009 a las 11:58 pm | #8

    Hola, muy bueno el tutorial, pero si creo necesitamos el proyecto porque hay cosas que no me quedan claras, soy nueva en esto y la verdad te agradeceria muchisimo si me envia la informaciona mi e-mail, porq en definitiva la estoy necesitando, necesito realizar un proyecto utilizando estas herramientas pero no son mi fuerte y me toca empaparme del tema y este tipo de tutoriales me ayudan muchisimo,, muchas gracias por dedicar parte de tu tiempo en esto… porfis espero recibir noticias suyas.

    P.D. Cualquier tipo de ejemplo que tenga que ver con estas herramientas sera muy bien recibido y aprovechado… Millon gracias por su tiempo.. Buen Dia..

    Saludos

    Fernanda

  8. Mayo 17, 2009 a las 7:10 pm | #9

    Muy wen post!

    gracias al ejemplo que hiciste pude hacer lo que necesitaba

    Saludos

    Alex.

  9. Junio 12, 2009 a las 11:06 am | #10

    Amigo muchas gracias por el tutorial la verdad me ayudaste bastante .solo me falta adecuarlo a struts 1.3 ,pero eso no es problema ya lo hare!.. me gustaria que postees un tutorial de ajax para validar campos de textos si puedes… de antemano muchas gracias ..te pasaste!!…..chau cuidate!

  10. david
    Junio 15, 2009 a las 5:23 pm | #11

    holasmuy bueno, pero en vez de llenar un cmbo quiero llenar una tabla si tuviera un ejemoplo o un blog seria brabazo y si puedes mandarme este tutorial por mi correo mejro aun mil gracias toy que me peleo con este con mi codigo y no me sale.

    a veces las cosas mas sencillas son las mas complejas….

    mi correo es malpicar.wd@gmail.com ó
    wdmalpica@hotmail.com

  11. NuevaenAjax
    Julio 1, 2009 a las 2:48 pm | #12

    Hola … excelente tutorial, muy claro
    podrias enviarme el codigo fuente? no pude hacer que se ejecutara la pagina

  12. richardgm
    Agosto 24, 2009 a las 4:32 pm | #13

    podrias enviarme el codigo fuente

    gracias

    rihardgm_20@hotmail.com

  13. Andres
    Septiembre 4, 2009 a las 5:00 pm | #14

    Excelente ayuda, me sirvio muchisimo, salvo que mi conexion era a Oracle.

    Gracias

  14. alejandro
    Septiembre 8, 2009 a las 9:48 pm | #15

    A pesar que hay quienes no agradecen, si habemos otros que apreciamos el esfuerzo que hacen personas como usted. Por un malagradecido habemos miles que sí apreciamos.

    Muchas gracias no sabe de que apuro me sacó despues de tanto buscar.

    Mil Gracias !!!!!!!!!!

  15. PERCY
    Septiembre 16, 2009 a las 11:53 pm | #16

    Buen dato amigo de verdad muchas gracias…. saludos desde Peru.

  16. quillincho
    Octubre 4, 2009 a las 9:30 am | #17

    muy bueno y práctico, pero tambien me gustaria aprender con RichFaces talvez podrias publicar un tutorial, muchas gracias Saludos desde Peru.

  17. Killjaden
    Octubre 16, 2009 a las 12:52 pm | #18

    El ejemplo esta muy bueno pero mi problema es que nececito hacer la consulta a una BD de access.

    mi correo es killjaden21@hotmail.com
    agradeceria muxo un poco de ayuda……

    Es muy bueno lo que ustds hacen de compartir sus conocimientos.
    Felicitaciones

  18. martin
    Noviembre 12, 2009 a las 4:26 pm | #19

    podrias enviarme la bd ya que no se que tipo de datos le has dado algunoa campos

    gracias
    mjaramillom_1@hotmail.com

  19. martin
    Noviembre 12, 2009 a las 4:35 pm | #20

    podrias enviarme el codigo fuente, y la db

    mjaramillom_1@hotmail.com

  1. Abril 1, 2009 a las 5:48 pm | #1