Curso de Struts 2
Ejercicio - utilizando una combo desplegable
En este ejercicio, reharemos el ejemplo del hospital utilizando un combo desplegable para seleccionar pacientes. Esto nos permitirá trabajar con listas dinámicas y mejorar la usabilidad del formulario.
Usaremos la etiqueta <s:select>
de Struts 2 para generar un menú desplegable. A continuación, mostramos un ejemplo de cómo configurarlo:
<s:select headerValue="Elija una opción" headerKey="-1" list="pacientes" multiple="false" listValue="%{nombre}" listKey="%{id}" name="paciente.id">
</s:select>
Explicación del código
headerValue
yheaderKey
:headerValue
: Define el texto visible en la primera opción del combo (por ejemplo, «Elija una opción»).headerKey
: Define el valor que se envía si el usuario no selecciona ninguna opción (por ejemplo,-1
).
list
:- Especifica la lista de objetos que se cargarán en el combo. Esta lista debe estar definida en la clase Action y puede contener objetos como pacientes o cualquier tipo de datos.
listValue
ylistKey
:listValue
: El atributo del objeto que se mostrará en el combo (por ejemplo, el nombre del paciente).listKey
: El atributo que se usará como identificador único para cada opción (por ejemplo, el ID del paciente).
multiple
:- Define si el combo permite seleccionar múltiples opciones (
true
) o solo una (false
).
- Define si el combo permite seleccionar múltiples opciones (
name
:- Especifica el atributo del formulario donde se almacenará la selección.
Ejemplo de lista dinámica en la clase Action
En la clase Action, definimos la lista de pacientes y los métodos correspondientes:
public class HospitalAction extends ActionSupport {
private List<Paciente> pacientes;
private int pacienteId;
public String execute() {
pacientes = new ArrayList<>();
pacientes.add(new Paciente(1, "Juan Pérez"));
pacientes.add(new Paciente(2, "María López"));
pacientes.add(new Paciente(3, "Carlos García"));
return SUCCESS;
}
public List<Paciente> getPacientes() {
return pacientes;
}
public int getPacienteId() {
return pacienteId;
}
public void setPacienteId(int pacienteId) {
this.pacienteId = pacienteId;
}
public static class Paciente {
private int id;
private String nombre;
public Paciente(int id, String nombre) {
this.id = id;
this.nombre = nombre;
}
public int getId() {
return id;
}
public String getNombre() {
return nombre;
}
}
}
Notas
1. Uso de headerValue
:
Para que la opción de encabezado («Elija una opción») sea visible, debemos asegurarnos de definir un headerKey
como identificador predeterminado.
2. Campos en horizontal:
Podemos organizar varios campos en una misma fila utilizando la siguiente estructura:
<tr>
<td>Fecha de alta:</td>
<td>
<s:textfield size="2" maxlength="2" name="dia" theme="simple" /> /
<s:textfield size="2" maxlength="2" name="mes" theme="simple" /> /
<s:textfield size="4" maxlength="4" name="anio" theme="simple" />
</td>
</tr>
3. Mostrar fechas:
Si queremos mostrar fechas en el formulario, podemos usar la etiqueta <s:date>
:
<s:date name="fecha" format="dd/MM/yyyy" />