Espero puedan ayudarme con este problema. Lo he buscado en la Web pero parece que las tecnologías descritas no se aplican a mi caso. Quisiera saber si es posible cargar un combobox a partir de otro (obteniendo los datos de una BD) usando Struts2 y jsp.
Si no es posible, ¿Otra opción es usando Ajax y Struts2? Si es así, ¿tienen códigos de ejemplo?
En realidad, no he podido lograr nada con Struts así que traté de jugar con javascript. Acá está mi código pero puede que no sea tan claro
En mi jsp tengo 2 combos. Uno con struts y el otro no
Código:
Luego en el javascript defino mi función populate llamada con onChange<table><tr><td><s:select name="cbxProyecto" headerKey="-1" list="listaProyectos" listValue="strNombre" listKey="{intIdProyecto}" onchange="populate(this,actividades_valores,actividades_valorespadre,actividades_nombres)"></s:select></td></tr></table></td> <td><table><tr><td><select name="ComboActividades" id="ComboActividades"></select></td></tr></table></td>
Código:
Esto no funciona. La razón es que los arreglos (ArrayList) "actividades_valores,actividades_valorespadre y actividades_nombres" se definen en el action (clase java) pero el javascript no los recibe.function populate(o,actividades_valores,actividades_valorespadre,actividades_nombres) { var valor_padre=o.options[o.selectedIndex].value; if(!valor_padre){return;} var hijo=document.getElementById('ComboActividades'); if(!hijo){return;} hijo.options.length=0; var indice=0; for(var i=0;i<actividades_valorespadre.length;i++) { if (actividades_valorespadre[i]==valor_padre) { indice=indice+1; } } hijo.options.length=indice; indice=0; for(var z=0;z<actividades_valorespadre.length;z++) { if (actividades_valorespadre[z]==valor_padre) { hijo.options[indice].text=actividades_nombres[z]; hijo.options[indice].value=actividades_valores[z]; indice=indice+1; } } }
¿Alguna otra forma de hacer esto con Struts 2 y jsp? ¿Estoy por el buen camino?
Muchas gracias de antemano