AYUDA CON STRUTS

leo
28 de Enero del 2010
Hola a todos

Estoy realizando una aplicacion con struts q tiene una pagina con un formulario y dentro de este formulario hay algunos campos q son generados dinamicamente con javascript ya q no c sabe cuantos va a utilizar el usuario.

mi problema es q no tengo ni la mas remota idea de como capturar los campos dinamicos en el actionForm y despues pasarlos al action para realizar los insert a la base yo he realizado aplicaciones con strut antes pero los formulario no eran dinamicos y sabia con certeza la cantidad de campos a procesar pero en este caso ni idea.

no si alguien a tenido el mismo problema o similar antes y me hecha la mano con alguna idea para solucionar mi caso

de ante mano gracias por su tiempo

ivan
28 de Enero del 2010
No se si podra hacer pero puedes recorrer elementos con un bucle FOR-EACH en un bucle de este tipo no sabes cuantos elementeos. los almacenas en un array de objetos, Strings o lo que quieras y luego en el servlet tratarlo.

alexisegc
28 de Enero del 2010
Buenas, con una función JavaScript puedes recojer todos los elementos del formulario y enviarlos por GET al action o a la controladora que lo va a procesar:
function getFormAsString(){

//Setup the return String
returnString ="";

//Get the form values
formElements=document.forms[0].elements;

//loop through the array, building up the url
//in the format '/strutsaction.do&name=value'

for(var i=formElements.length-1;i>=0; --i ){
//we escape (encode) each value
returnString+="&"
+escape(formElements[i].name)+"="
+escape(formElements[i].value);
}

//return the values
return returnString;
}

cesarrun
28 de Enero del 2010
Si creas dinamicamente campos, y nombras a los campos del mismo modo, podrías tener un arreglo de campos, diferenciados por un indice.

En tu jsp, quedaría algo así como:

Ej.:
<input type="text" name="campos" value=""/>
<input type="text" name="campos" value=""/>
.
.
.
<input type="text" name="campos" value=""/>

En tu form recibirías los valores de los campos con una variable tipo array:

Ej.: <form-property name="campos" type="java.lang.String[]"/>

y ya en tu action, recuperas tu array:
Ej.:
String[] campos= (String[])((DynaActionForm)form).get("campos");

lo recorres y obtienes los valores, para realizar con ello lo que necesites:

Ej.: for(String campo: campos){
Dao.insert(campo);
}

Ahora si para cada campo en tu formulario, requieres de un nombre de campo especifico en tu base de datos, puedes anexar un control tipo hidden para asignarle el nombre del campo de la base de datos que hace referencia el valor del campo.

En tu jsp.
Ej.:
<input type="text" name="campos" value=""/>
<input type="hidden" name="camposBD" value="campo1"/>

<input type="text" name="campos" value=""/>
<input type="hidden" name="camposBD" value="campo2"/>
.
.
.

y recuperas de la misma manera los valores del nombre del campo y su valor correspondiente.

Ej.: for(int i; i <campos.length; i++){
//camposBD[i]: nombre del campo en la bd
//campos[i]: valor del campo
Dao.insert(campoBD[i] , campo[i]);
}

Saludos!!!