2011-04-29 6 views
5

Siento que esto debería ser extremadamente obvio, pero hasta ahora no he podido encontrar una respuesta.Llenar lista <String> en struts2 a partir de datos de formulario

Quiero tener una lista de cadenas (o una matriz de cadenas, realmente no me importa) que se llene por datos de formulario en Struts2.

He visto varios ejemplos de cómo hacer indexed properties with beans, pero envolver una sola cadena dentro de un objeto parece bastante tonto.

Así que tengo algo así como

public class Controller extends ActionSupport { 

     private List<String> strings = new ArrayList<String>(); 
     public Controller() { 
      strings.add("1"); 
      strings.add("2"); 
      strings.add("3"); 
      strings.add("4"); 
      strings.add("5"); 
     } 
     public String execute() throws Exception { 
      return ActionSupport.SUCCESS; 
     } 
     public List<String> getStrings() { 
      return strings; 
     } 

     public void setStrings(List<String> s) { 
      strings = s; 
     } 
    }  

...

<s:iterator value="strings" status="stringStatus"> 
    <s:textfield name="strings[%{#stringStatus.index}]" style="width: 5em" /> 
</s:iterator> 

Los campos del formulario son rellenados con sus valores iniciales (por ejemplo, 1, 2, etc), pero los resultados no son adecuadamente publicado de nuevo. setStrings nunca se llama, pero los valores se establecen en cadenas vacías.

¿Alguien tiene alguna idea de lo que está pasando? ¡Gracias por adelantado!

Respuesta

7

creo que lo tienes, el código JSP haría algo como:

<input type="text" name="strings[0]" style="width: 5em" value="1"/> 
<input type="text" name="strings[1]" style="width: 5em" value="2"/> 
<input type="text" name="strings[2]" style="width: 5em" value="3"/> 
... 

en cuenta que el nombre de las referencias de campo son "cadenas [x]", donde como usted necesita el nombre que se acaba "instrumentos de cuerda". Yo sugeriría algo así como:

<s:iterator value="strings" status="stringStatus"> 
    <s:textfield name="strings" value="%{[0].toString()}" style="width: 5em" /> 
</s:iterator> 

No estoy seguro si el atributo de valor por encima de mayo es correcta, pero creo que algo como esto le dará el resultado deseado.

+0

Eso funciona, ¡gracias! Parece extraño que tenga que especificar el valor de lo que parece ser el caso simple, pero no para los beans. * shrug * Además, cuando dices que 'el nombre de las referencias de campo son' cadenas [x] 'donde como necesitas que el nombre sea solo' cadena ',' supongo que quieres decir 'cadenas' ... .? Finalmente, el primero sería el formato correcto para beans, a la derecha (por ejemplo, personas [0] .name con ArrayList personas)? – Chris

+0

Marque esta respuesta como resuelta si se ha resuelto el problema. – Quaternion

+0

@Quaternion: ya hecho. Aunque él (aparentemente inadvertidamente) editó la parte clave de su solución; es decir, el valor debe estar en la línea de% {getStrings(). get (# stringStatus.index)} – Chris

Cuestiones relacionadas