Se pueden hacer Listas dependientes en JSP con los datos capturados de Base de datos???

crodri1977
10 de Junio del 2003

Hola, tengo el siguiente problema: He visto hartos códigos para hacer listas dependientes, pero lo que pasa es que todos los ejemplos son con datos fijos P/E: en la lista1 se elige "libro" y aparece un listado de libros; se elige "autos" aparece un listado de autos.
Mi consulta es como lo puedo hacer con datos que no sean fijos, incluso ya tengo almacenados los datos en arreglos (varialbles de jsp) pero no sé como mezclarlos con el código javascript de las listas desplegables.

Si alguien sabe como hacerlo y me puede ayudar lo agradezco.

César Rodríguez

jcaro
10 de Junio del 2003
En algun momento tuve que hacer lo mismo que ustedes dicen pero sin recargar la pagina, que los datos esten en la pagina y el cambio sea inmediato, tal vez se pueda optimizar, pero aqui esta y espero que les pueda servir, dudas???
me pueden escribir al mail
--------------------------------------
<%
//toma los datos de la tabla maestra
java.util.Hashtable hash=new java.util.Hashtable();

%>
<script>
//crea un Array e Arrays
var actividades=new Array(
<%
java.util.Enumeration keys=hash.keys();
java.util.Enumeration dats=hash.elements();
//llena los datos de la tabla maestra
while(keys.hasMoreElements())
{
%>
//lo guarda en un vector javascript para poderlo llamarlo en la pagina sin recargar!!!
new Array('<%=keys.nextElement()%>','<%=dats.nextElement()%>'),
<%
}
%>
"")//cierra el vector con la ultima posicion vacia

//crea los datos de la tabla dependiente
var roles=new Array(
<%
keys=hash.keys();
while(keys.hasMoreElements())
{
int actividad=((Integer)keys.nextElement()).intValue();
Vector elementos=Clase.cargarDatosDependiente(actividad);
for(int i=0;i<elementos.size();i++)
{
%>
new Array('<%=actividad%>','<%=elementos.get(i)%>','<%=elementos.get(i)%>'),
<%
}
}
%>
"")

function cargar()
{
f = document.forma;
if(f.actividad.length > 0 )
{
for(var j=0; j < f.actividad.length;j++)
{
f.actividad.options[j].text="";
f.actividad.options[j].value="";
f.actividad.options[j]=null;
}

}
for(i=0;i<actividades.length;i++)
{
opc=new Option(actividades[i][1],actividades[i][0]);
f.actividad.options[i]=opc;
if(f.actividad.options[i].value=='<%=idActividad%>')
f.actividad.options[i].selected=true;
}
if(f.rol.length > 0 )
{
for(var j=0; j < f.rol.length;j++)
{
f.rol.options[j].text="";
f.rol.options[j].value="";
f.rol.options[j]=null;
}
}
cambio();
}
function cambio()
{
var i=0;
f = document.forma;
proc = f.actividad.options[f.actividad.selectedIndex].value;
sw = 0;
while(f.rol.length > 0 )
{
for(var j=0; j < f.rol.length;j++)
{
f.rol.options[j].text="";
f.rol.options[j].value="";
f.rol.options[j]=null;
}
}
for(i=0;i<roles.length-1;i++)
{
if(roles[i][0]==proc)
{
a = new Option(roles[i][2],roles[i][1]);
f.rol.options[sw]=a;

if(f.rol.options[i].value=='<%=rol%>' && f.rol.options[i].value!='')
f.rol.options[i].selected=true;

sw++
}
}
//f.rol.selectedIndex=0;
}
</script>

<table width="100%" class="filaNormal">
<tr>
<td class="label1" width="60%">Seleccione la actividad en la cual se evaluar&aacute;</td>
<td width="40%">
<select name="actividad" onchange="cambio();" class="controlNormal">
<option value="-1">____________________________</option>
<option value="-1">____________________________</option>
<option value="-1">____________________________</option>
<option value="-1">____________________________</option>
<option value="-1">____________________________</option>
<option value="-1">____________________________</option>
</select>
</td>
</tr>
<tr>
<td class="label" width="60%">Seleccione el rol que debe tener el actor asignado a esta actividad</td>
<td width="40%">
<select name="rol" class="controlNormal">
<option value="-1">____________________________</option>
<option value="-1">____________________________</option>
<option value="-1">____________________________</option>
<option value="-1">____________________________</option>
<option value="-1">____________________________</option>
<option value="-1">____________________________</option>
</select>
</td>
<script>
cargar();
</script>
</tr>
</table>
---------------------------------

xavi
10 de Junio del 2003
Si se puede. Si lo tienes en arreglos puedes hacer una "hastable" (miralo en las api...). Una vez tengas el hashtable, las keys serian "libro" o "autos", y dentro de cada llave tendrias el arreglo con los elementos que le correspondan.

Luego el la lista1 con javascript haces "onChange()" y recargas el JSP pasandole el valor de esta lista1..y llenando la lista 2 con los valores correspondientes.

Si no te queda claro (me explico muy mal...) me envias un mail y te mando algo de còdigo, ok?

Saludos.