Fetishcode…Thinking in objects

Combos dependientes en jsp con AJAX.

Publicado en Java by fetishcode en Abril 26th, 2008

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

Etiqueta con:, ,

6 Responses to 'Combos dependientes en jsp con AJAX.'

Subscribe to comments with RSS or Enlace inverso to 'Combos dependientes en jsp con AJAX.'.

  1. Juan Lopez said, on Junio 3rd, 2008 at 7:21 pm

    ….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. fetishcode said, on Junio 5th, 2008 at 4:57 am

    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

  3. Juan Lopez said, on Junio 6th, 2008 at 7:09 pm

    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!!!

  4. fetishcode said, on Junio 7th, 2008 at 8:08 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

  5. Juan L said, on Junio 10th, 2008 at 12:07 am

    …Q tal, a que correo te podría enviar los archivos con el código?
    ….Y de nuevo gracias x tu tiempo!!!

  6. fetishcode said, on Junio 10th, 2008 at 6:01 am

    En la pagina de contacto, tenemos una direccion de correo.

    http://fetishcode.wordpress.com/about

    Saludos.

Leave a Reply