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

….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!!!
Juan Lopez
Junio 3, 2008 a 7:21 pm
Juan
La idea es la misma meterle un onchange al segundo combo y realizar la carga del tercero.
de todas formas te paso una url con un ejemplo de tres niveles. Esta en php pero la idea es la misma.
http://www.formatoweb.com.ar/ajax/select_dependientes_3_niveles.php
Saludos
fetishcode
Junio 5, 2008 a 4:57 am
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!!!
Juan Lopez
Junio 6, 2008 a 7:09 pm
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
fetishcode
Junio 7, 2008 a 8:08 pm
…Q tal, a que correo te podría enviar los archivos con el código?
….Y de nuevo gracias x tu tiempo!!!
Juan L
Junio 10, 2008 a 12:07 am
En la pagina de contacto, tenemos una direccion de correo.
http://fetishcode.wordpress.com/about
Saludos.
fetishcode
Junio 10, 2008 a 6:01 am
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..
Carlos Rubio
Febrero 3, 2009 a 10:17 pm
como envio los datos seleccionados en el combo dependiente a la Base de datos mediante un boton
luis bolivar
Abril 26, 2009 a 7:43 pm
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
geovanny
Julio 23, 2009 a 4:13 pm