Los elementos select son bastante sencillos. Te explico un poco en general y si acaso tienes alguna duda más concreta, pregúntala.
En Struts tienes unas etiquetas para generarlos. <html:select>, <html:option> y <html:options>.
El objetivo al final es generar algo como:
<select id="color" name="color">
····<option value="verde1">Verde Claro</option>
····<option value="verde2">Verde Aceituna</option>
····<option value="verde3">Verde Esmeralda</option>
</select>
La parte de fuera, el select, es sencillo:
<html:select property="color">
···<!-- ... -->
</html:select>
Los elementos option los puedes generar de varias formas:
1. Directamente con <html:option>. Si por ejemplo tienes sólo una serie de opciones fijas, o si quieres insertar alguna opción fija, puedes usar esto.
<html:option value="verde1">Verde Claro</html:option>
<html:option value="verde2">Verde Aceituna</html:option>
...
2. Si tienes opciones variables, que se obtienen dinámicamente de la base de datos (como en tu caso), o de un fichero de configuración o de donde sea, la forma apropiada es la siguiente:
- El Action correspondiente obtiene esos valores y los guarda en una Collection (o si prefieres, en un array). Luego guardas la lista en la reuqest o en la sesión o en la aplicación, según sea tu caso.
- En el JSP en lugar de <html:option> usa <html:options>, así:
<html:options collection="colores" property="codigo" labelProperty="nombre" />
Ese ejemplo lo que supone es que tienes una colección de objetos con una propiedad que se llama codigo (que será el verde1, verde2...) y otra propiedad que se llama nombre (que será el Verde Claro, Verde Aceituna...).
Puedes incluso usar ambos a la vez:
<html:select property="color">
····<!-- Podríamos por ejemplo poner un valor fijo y los otros obtenidos de la BBDD -->
····<html:option value="none">Sin Preferencia</html:option>
····<html:options collection="colores" property="codigo" labelProperty="nombre" />
</html:select>
Puedes incluso poner varias colecciones dentro de un mismo select. No es muy habitual tener que hacer eso, pero se puede.
(Un detalle más: Al cargar el select, se mira el valor de la property (color, en el ejemplo) del formulario. Según lo que valga se selecciona la opción que corresponda.)
Bien. Esto es lo que se refiere a la primera parte, la de sacar los datos y hacerlos visibles en el formulario. La otra parte de la historia es recibir los valores escogidos.
Esto es bastante sencillo: Te va a llegar como un parametro más, con el nombre "color" y con valor el value de la opción escogida (p.ej. "verde2"). En caso de que no pusieras value ( <html:option>Verde Claro</html:option>) se recibe lo que se ve, "Verde Claro", pero te recomiendo que uses value e identifiques las opciones con algún código mejor que confiar en los literales visibles.
Es decir, que en tu Actionform necesitarás una propiedad color, con su get y set correspondiente:
private String color;
public void setColor(String in) { this.color = in; }
public String getColor() { return this.color; }
Si tuvieras que tener un select con posibilidad de elegir varias opciones, tendrás que añadir la posibilidad de que lleguen varios valores (un array de String):
private String[] colores;
public void setColor(String[] in) { this.colores = in; }
public String[] getColor() { return this.colores; }
// Pero también tenemos que conservar esta, por si sólo llega 1 valor:
public void setColor(String in) { this.colores = new String[1]; colores[0] = in; }
Bueno, lo dicho antes. Lo dejo aquí y si tienes alguna pregunta concreta sobre algún detalle que no haya quedado claro, dilo, ok?