Curso de Struts 2 | Ejercicio - utilizando una combo desplegable 1

Curso de Struts 2
Ejercicio - utilizando una combo desplegable

Curso de Struts 2 | Ejercicio - utilizando una combo desplegable 2

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

  1. headerValue y headerKey:
    • 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).
  2. 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.
  3. listValue y listKey:
    • 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).
  4. multiple:
    • Define si el combo permite seleccionar múltiples opciones (true) o solo una (false).
  5. 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" />