Lista desplegable

Después de buscar y preguntar te escribo para comentarte mi problemilla:
Estoy haciendo un proyecto con struts y por en medio voy a utilizar AJAX (soy totalmente novato en esto). Ahora mismo tengo que hacer una lista desplegable a partir de una lista de string que tengo guardada en la sesión en la que nada más elegir una opción me muestre unos datos en la página. He probado con el html:select pero no consigo que me funcione. Me podrías explicar como usar el html:¿select en este caso?
Espero no haberme explicado demasiado mal... Si es así dímelo e intentaré explicarme mejor.

1 respuesta

Respuesta
1
Antes de nada unas preguntillas:
- ¿Usas Struts 1.x o Struts 2.x?
- ¿Los datos que quieres meter en el select (los options) son dinámicos (los sacas de BBDD o configuración) o son estáticos?
Respóndeme y te ayudo.
Uso struts 1.x
Los datos los saqué de una base de datos y los guardé como lista de strings en la sesión así que en este caso son estáticos creo. Mientras estoy en la página con la lista desplegable los datos de la lista no cambian. Y si me voy de la página cuando vuelvo a ella de nuevo paso los datos a la lista de strings en la sesión. No sé si es una forma muy correcta de hacerlo la verdad...
Ok. Vamos a suponer que lo que quieres es un seleccionable de países. Lo que tienes que hacer es asegurarte de que cuando salga el HTML, exista en sesión una variable que se llame "paisesOptions", que deberás rellenarlo en algún action de tu aplicación de esta manera:
java.util.Vector paisesOptions = new java.util.Vector();
PaisesOptions.add(new org. Apache. Struts. Util.LabelValueBean("España","ES");
PaisesOptions.add(new org. Apache. Struts. Util.LabelValueBean("Alemania","DE");
PaisesOptions.add(new org. Apache. Struts. Util.LabelValueBean("Italia","IT");
Request. GetSession().setAttribute("paisesOptions", paisesOptions);
Luego, en el HTML, deberás tener algo así:

<html:select property="pais">


<html:optionsCollection name="paisesOptions" />


</html:select>
Gracias por la ayuda, lo probaré esta tarde a ver que tal va y te cuento.
Por cierto, mi variable en la sesión es una List<String> lista donde tengo una lista de nombres pero por lo que veo cuando haces tu lista metes una pareja de valores como (ESPAÑA, ES). ¿Es necesario hacerlo así? ¿No podrías meter en paisesOptions solo nombres de países sin la abreviatura?
Lo del par de valores se hace porque normalmente la descripción que aparece en los options no tiene por qué ser la misma que los valores internos de dichos options. Este valor interno es el que luego pasa a ser valor del Select, y es el que se envía cuando haces un submit del formulario.
Yo te sugiero que a la vez que creas tu List<String>, te crees un Vector<LabelValueBean> y vayas metiendo los pares de valores, aunque luego metas lo mismo en el label y en el value. Creo que para que funcione bien la carga automática de los options a partir de un objeto Collection que esté en sesión, los elementos de la colección deben ser del tipo LabelValueBean.
Hola Carlos, pues ya me puse a probar tu solución y me sale un problemilla:
Al poner el código que me enviaste me sale que el paquete org. Apache.struts.utils no existe... ¿Estoy usando el netbeans 6.9.1 y creo que me lo bajé completo del todo... que puedo hacer? ¿Me busco el paquete por ahí y lo añado a la biblioteca? ¿O puedo usar otra cosa?
Respecto al código:
<html:select property="pais" onChange=muestra()>
¿Hay alguna forma de que al mostrar por primera vez la lista desplegable no tenga ninguna opción elegida?
¿Con la linea anterior guardaría la selección de la lista en país? ¿Luego para usar la variable país tendría que guardarla en un actionform bean?
¿Me funcionaría la función muestra() en cuanto seleccione una opción?
Perdona que te agobie con tanta pregunta, es que voy algo de cabeza con este tema.
Muchísimas gracias por la ayuda
Saludos!
post data al comentario anterior: la pregunta sobre que no me encuentra el org. Apache.struts... olvidala, resulta que no puedo usarlo en un ejb pero sí en el proyecto web.
Lo de que salga una opción vacía al principio del todo se hace así:

<html:select property="pais" onChange="muestra()" value="0">


<html:option value="0">
Selecciona un país
</html:option>

<html:optionsCollection name="paisesOptions" />
</html:select>

Efectivamente, la función javascript "muestra()" se ejecutará cuando selecciones una opción.
Si este
<html:select>
lo tienes dentro de un
<html:form>
, el correspondiente ActionForm deberá tener un campo "pais" para recuperar el país seleccionado
Otra cosa: creo que se pone
<html:optionscollection>
(Todo con minúsculas).
Carlos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas