Elemento select anidado con Struts

Deseo mostrar en un formulario una serie de opciones con un select, las cuales están en una base de datos. Estoy usando Struts y deseo hacerlo con <html:select>. He visto ejemplos y explicaciones en foros bastante buenas, pero no me son suficientes porque mis datos están anidados y no consigo mostrar lo que yo deseo.
Tengo una clase llamada 'UsuarioContainer' que tiene un campo de tipo 'CarteraGlobal'. Ese contenedor con los datos del usuario lo guardo en la sesión con la sentencia
session.setAttribute("UsuarioContainer", usuarioContainer);
Así ya tengo los datos en la sesión, y como decía, el objeto 'UsuarioContainer' tiene un campo de tipo 'CarteraGlobal'. Esta clase posee un campo de tipo 'List' llamado "carteras"
private List carteras;
Y esta collection posee los datos de las carteras de un usuario, almacenando objetos de tipo 'CarteraVO'.
Yo lo que quiero es mostrar con el select los nombres de esas 'CarteraVO' que posee el usuario en cuestión, que se corresponden con la propiedad 'idCartera' de la clase 'CarteraVO'
No sé si ha quedado claro, pero no consigo lo que pretendo. ¿Alguien puede ayudarme? Si no entendéis algo de lo explicado preguntadme, ¿ok?

1 Respuesta

Respuesta
1
Lo habitual cuando tienes una colección de elementos para construir el form es usar <html:options o <html:optionsCollection siendo este último el que creo que te interesará usar.
Por lo que entiendo, la lista de datos no está en el ActionForm que le llega a la página, si no que está en la request como atributo.
Así que la forma que creo que debes usarlo es algo como :
<html:select property="carteraSeleccionada">
<html:optionsCollection
name="UsuarioContainer"
property="carteras"
value="idCartera"
label="nombreCartera" />
Donde entiendo que UsuarioContainer. GetCarteras() --> List
Y una Cartera. GetIdCartera() y Cartera. GetNombreCartera() para rellenar el los options.
Luego tienes la opción de hacerlo "a mano"... es decir, recuperar la colección e iterar y poner un <html:option value="...">texto</html:option> para construir el select.
Hola!
Eres un fenómeno!, y no por el hecho de haberme resuelto el problema, que también!, sino por haberme dado una solución certera a la primera y dentro del contexto de mi problema, a pesar de ser éste totalmente
Desconocido para ti. No hay duda de que controlas un montón de esto!
Yo había salido del paso con este código
<html:select property="idCart" value="nuevCart">
<html:option value="nuevCart">Nueva cartera</html:option>
<logic:iterate id="cartera" name="usuarioContainer" property="cartGlob.carteras">
<option value="<bean:write name="cartera" property="idCartera"/>">
<bean:write name="cartera" property="idCartera"/>
</option>
</logic:iterate>
</html:select>
Que funcionaba exactamente como quería, pero lo que buscaba era la solución que tú me has dado. Es más elegante. Lo intenté con <html:options>, pero tras muchas pruebas lo dejé por imposible
¿Me puedes decir cuándo debo usar <html:options> y <html:optionsCollection>?, porque es algo que no me quedó nada claro leyendo la documentación relativa a esto.
Y gracias!
La respuesta viene en la misma TLD del tag, la diferencia entre uno y otro es la forma de construir el listado de opciones. Options permite usar lista de labels y values para rellenarlo mientras que optionsCollection trata cada elemento de la colección como un bean y se puede indicar la propiedad a mostrar.
En la referencia de struts puedes encontrar más información:
http://struts.apache.org/1.3.8/struts-taglib/tlddoc/
Yo personalmente siempre uso optionCollections o itero sobre cada elemento de la colección y uso "option".

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas