Ver Mensaje Individual
  #5 (permalink)  
Antiguo 06/01/2009, 08:40
cesartapiag
 
Fecha de Ingreso: diciembre-2008
Mensajes: 8
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Struts JSP - Crear listas anidadas

Hola a todos, y feliz año 2009. Bueno, hice lo que me recomendaron, utilice javascript
para cargar en un array los datos que traigo a la pagina, y luego los cargo en el combobox.

Los combos me quedaron asi:

<html:select property="idProyecto" onchange="filtroCombo();" styleId="listarProyectos">
<html:optionsCollection property="listaProyectos" value="codigo" label="descripcion"/>
</html:select>

<html:select property="idUsuario" styleId="listarUsuariosXProyecto">
<html:optionsCollection property="listaUsuarios" value="codigo" label="descripcion"/>
</html:select>


Ahora, en el javascript. cree una función filtroCombo, que llenara el combo solo con los datos que quiero, a partir de una lista que le envío. Concateno los datos separados por un @ y luego los separo y almaceno como corresponda. Este es mi javascript:

function obtenerPrimerID(texto)
{
var z;

for(z=0; z<texto.length; z++)
if(texto.substring(z, z+1) == '@')
return texto.substring(0,z);

return "";
}

function obtenerSegundoID(texto)
{
var z;
var posx = 0;

for(z=0; z<texto.length; z++)
{
if(texto.substring(z, z+1) == '@' && posx == 0 )
{
posx = z+1;
}
else
{
if(texto.substring(z, z+1) == '@' && posx > 0 )
return texto.substring(posx,z);
}
}
return "";
}

function obtenerDescripcion(texto)
{
var z;
var posx = 0;
var nArr = 0;
var largo = 0;

largo = texto.length;
for(z=0; z<texto.length; z++)
{
if(texto.substring(z, z+1) == '@' && posx == 0 )
{
posx = 1;
}
else
{
if(texto.substring(z, z+1) == '@' && posx == 1)
{
return texto.substring(z+1,largo);
}
}
}

return "";
}

function filtroCombo()
{
f = document.administrarFB;
var usuarios= new Array(f.listarUsuariosXProyecto.options.length);
<c:forEach items="${administrarFB.listaUsuariosXProyecto}" var="comboTO" varStatus="statusComboTO">
<c:if test="${(statusComboTO.count) == 1}">
usuarios[0] = "<c:out value="${comboTO.idProyecto}"/>@<c:out value="${comboTO.codigo}"/>@<c:out value="${comboTO.descripcion}"/>";
usuarios[<c:out value="${statusComboTO.count}"/>] = "<c:out value="${comboTO.idProyecto}"/>@<c:out value="${comboTO.codigo}"/>@<c:out value="${comboTO.descripcion}"/>";
</c:if>
<c:if test="${(statusComboTO.count) != 1}">
usuarios[<c:out value="${statusComboTO.count}"/>] = "<c:out value="${comboTO.idProyecto}"/>@<c:out value="${comboTO.codigo}"/>@<c:out value="${comboTO.descripcion}"/>";
</c:if>
</c:forEach>

if(parseInt(f.listarProyectos.selectedIndex) != -1)
{
f.listarUsuariosXProyecto.disabled = false;
f.listarUsuariosXProyecto.options.length = 0;
var opt = document.createElement('OPTION');
opt.text = "Todos";
opt.value = parseInt(0);
f.listarUsuariosXProyecto.add(opt);
var i = 1;
var texto = "";
for(var k = 0; k < usuarios.length; k++)
{
if(i < usuarios.length)
{
var proyectoID;
var usuarioID;
var usuarioDescripcion;

texto = usuarios[i];
proyectoID = obtenerPrimerID(texto);

if(parseInt(f.listarProyectos.value) == parseInt(proyectoID))
{
usuarioID = obtenerSegundoID(texto);
usuarioDescripcion = obtenerDescripcion(texto);

var opt = document.createElement('OPTION');
opt.text = usuarioDescripcion;
opt.value = parseInt(usuarioID);
f.listarUsuariosXProyecto.add(opt);
}
}
i++;
}
}
else
{
f.listarUsuariosXProyecto.selectedIndex = 0;
f.listarUsuariosXProyecto.disabled = false;
}
}


Ejecute el código en Internet Explorer 6.0, y no tuve ningún problema. Sin embargo, al hacerlo en Firefox (Version 2.0.0.20), aparece este error:


Error: uncaught exception: [Exception... "Not enough arguments" nsresult: "0x80570001 (NS_ERROR_XPC_NOT_ENOUGH_ARGS)" location: "JS frame :: http://../administrar/lista.jsp :: filtroCombo :: line 698" data: no]

La linea 698 de mi código es:

f.listarUsuariosXProyecto.add(opt);

Quisiera saber q puede ser el problema, y como lo podría solucionar.

Desde ya, gracias.