Combos dependientes en jsp con AJAX.

Para ello lo que haremos será crear los combos dependientes en jsp separados,llamarles via ajax y el resultado incrustarlo en el jsp que contiene el formulario con el combo principal.
A continuación un pequeño ejemplo:

Jsp Principal:

<form name="formulario" action="action.jsp" method="POST" id="formulario">
   <div>
      <label for="comboprincipal"> comboPrincipal </label>
      <select name=" comboprincipal " id=" comboprincipal " onchange="javascript:cargarCombo(' combodependiente.jsp', 'comboprincipal', div_combodependiente)">
            <option value="">Selecciona</option>
             < %//cogemos valores de la bbdd%>
       </select>
     </div>
     <div id="div_combodependiente">
         <label for="combodependiente">comboDependiente</label>
         <select name="combodependiente"  id="combodependiente" ></select>
     </div>
 </form>

A continuación el javascript que hace la peticion AJAX del jsp combodependiente. Este método recibe tres parámetros:el jsp que tiene que llamar, el campo que ha recogido del combodeprincipal, del cual depende y el id del componente html donde volcara el resultado de la petición Ajax.

/*PETICIONES AJAX PARA COMBOS ANIDADOS*/
var peticion = false;
var  testPasado = false;
try {
  peticion = new XMLHttpRequest();
  } catch (trymicrosoft) {
  try {
  peticion = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (othermicrosoft) {
  try {
  peticion = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (failed) {
  peticion = false;
  }
  }
}
if (!peticion)
alert("ERROR AL INICIALIZAR!");

function cargarCombo (url, comboAnterior, element_id) {
    //Obtenemos el contenido del div
    //donde se cargaran los resultados
    var element =  document.getElementById(element_id);
    //Obtenemos el valor seleccionado del combo anterior
    var valordepende = document.getElementById(comboAnterior)
    var x = valordepende.value
    //construimos la url definitiva
    //pasando como parametro el valor seleccionado
    var fragment_url = url+'?Id='+x;
    element.innerHTML = '<img src="Imagenes/loading.gif" />';
    //abrimos la url
    peticion.open("GET", fragment_url);
    peticion.onreadystatechange = function() {
        if (peticion.readyState == 4) {
	//escribimos la respuesta
	element.innerHTML = peticion.responseText;
        }
    }
   peticion.send(null);
}

Y por último el combodependiente.jsp

< %
    out.println("<label for='combodependiente'> comboDependiente ");
    out.println("<select name='combodependiente'  id='combodependiente' >");
    out.println("<option value=''>Selecciona</option>");
//recogemos el parámetro
if(request.getParameter("Id")!=null){ //cogemos valores de la bbdd
}
%>

Como veis en el combodependiente.jsp solo cargamos los posibles valores del combo sin el elemento  contenedor “Select” ya que este se implementa en el jsp principal.

Nota:El JavaScript fue sacado de http://www.webintenta.com

Actualización:En el combodependiente.jsp es importante cargar todo mediante out.println sino no funciona en IE7

29 pensamientos en “Combos dependientes en jsp con AJAX.

  1. ….Chevere este ejemplo, llevaba bastante tiempo buscando combox dependientes con AJAX en jsp. Será que también podes postear alguna idea de como hacer esto con más de dos……un saludo!!!

  2. Hola que tal, de nuevo yo x aca con inquietudes.

    Intente poner a trabajar estos combos anidados en mi IDE que es netbeans y nada, me esta generando un error en el explorador. En la barra de tareas del explorador aparece un icono que me indica que hay un error en un porción de código. Allí donde aparece var x = valordepende.value;……intente asignandole un valor por defecto a x y nada, tampoco obtengo algún resultado en el combo2 (combo dependiente). Intente hacerle un seguimiento con alert() para ver en donde encontraba el error pero aún nada. Será que si de pronto posteo el código, me podrías hacer el favor de ayudarme a corregir este error? ….y gracias!!!

  3. Hola Juan.
    Fijate si has pasado bien los parametros a la funcion cargarCombo();.
    El segundo parametro debe ser el combo del que depende el que vamos a cargar, es decir el combo principal.

    Si no te sales…envia el codigo y haber si podemos hecharle un ojo.
    Saludos

  4. Juan,

    El error esta en el jsp principal… Te lo mostrare:
    onchange=”javascript:cargarCombo(‘ combodependiente.jsp’, ‘comboprincipal’, div_combodependiente)”

    y deberia ser asi…
    onchange=”javascript:cargarCombo(‘ combodependiente.jsp’, ‘comboprincipal’, ‘div_combodependiente’)”

    ves la diferencia? hacian falta las comillas en el tercer parametro del llamado al metodo… eso es todo..

  5. Buenos días, es la primera vez que participo en este foro y estoy realizando mi primera aplicación en jsp. Estuve intentando utlizar el código anterior para tres combos pero se deshabilita el onchange del segundo y no me carga nada en el tercero. La base de datos está en MySQL.

    De antemano gracias por la ayuda

  6. oe men esta bn el ejemplo pero porfavor me lo podrias mandar comprimido recien estoy estudiando ajax y parece q tu ejemplo me puede ayudar

  7. Hola que tal, tengo un error, me sale esto

    Mensaje: Unknown runtime error Línea: 36 Carácter: 2 Código: 0

    if (peticion.readyState == 4) {
    //escribimos la respuesta
    element.innerHTML = peticion.responseText; //ESTA LINEA ES LA 36
    }

    a que se debe? me podrias porfa enviar el ejemplo?

  8. Excelente aporte. Lo utilice con las ocrrecciones y funciona. Quise hacerlo para un tercer combo y bien, llama a la función y muestra el select, el problema es que entre el segundo select hacia el tercero, el valor que llega a la función dice que esta indefinida, o sea que al seleccionar en el sgundo combo, no envia el valor y por lo tanto el tercero no lo recibe. Tengo ese problema solamente, donde lo soluciono?
    Gracias

  9. Pingback: Los números de 2010 « Fetishcode

  10. Bueno Gracias por el codigo pero, por favor corrigan lo de las comillas y los espacios en el id del slect (comboPrincipal), y crep que el termino combo no aplica, CON UNAS CORRECCIONES FUNCIONA!

    Gracias

  11. hola porfavor me pueden ayudar llego algunos dias buscando combos independientes en jsp y este es el mejor pero no me ejecuta no me sale nada ya hice los cambios pero nada porfavor me podrian ayudar es suma importancia estoy trabajando con netbeans y postgres si alguien me puede mandar un ejemplo se lo agradeceria mi correo es khristixn_mxverik@hotmail.es

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s