mvc example java spring thymeleaf

java - example - thymeleaf spring 5



¿Cómo mostrar todos los valores de enumeración posibles en una lista desplegable con Spring y Thymeleaf? (2)

Además, si desea separar el nombre ordinal de la enumeración de la cadena que se muestra en la GUI, agregue propiedades adicionales, por ejemplo, una persona:

public static enum State { OPEN("open"), IN_WORK("in work"), FINISHED("finished"); private final String displayName; State(String displayName) { this.displayName = displayName; } public String getDisplayName() { return displayName; } }

Y en el archivo html:

<select> <option th:each="state : ${T(com.mypackage.Ticket.State).values()}" th:value="${state}" th:text="${state.displayName}"></option> </select>

Esto le presentará la información al usuario y le permite cambiar esta cadena de manera silenciosa más tarde sin tener que refactorizar el código. Puedes agregar más propiedades como th: title de esta manera.

Tengo un objeto de dominio que tiene una propiedad de enumeración y quiero mostrar una lista desplegable con todos los valores de enumeración posibles en el formulario para este objeto. Imagina el siguiente objeto:

public class Ticket { private Long id; private String title; private State state; // Getters & setters public static enum State { OPEN, IN_WORK, FINISHED } }

En mi controlador tengo un método que representa un formulario para este objeto:

@RequestMapping("/tickets/new") public String showNewTicketForm(@ModelAttribute Ticket ticket) { return "tickets/new"; }

La plantilla se ve así:

<form th:action="@{/tickets}" method="post" th:object="${ticket}"> <input type="text" th:field="*{title}" /> <select></select> </form>

Más tarde debería transformarse en algo como esto:

<form action="/tickets" method="post"> <input type="text" name="title" /> <select name="state"> <option>OPEN</option> <option>IN_WORK</option> <option>FINISHED</option> </select> </form>

¿Cómo puedo crear la etiqueta de selección? El valor seleccionado también debe asignarse al ticket automáticamente para que pueda hacer algo como esto en el controlador:

@RequestMapping(value = "/tickets", method = RequestMethod.POST) public String createTicket(@Valid Ticket ticket) { service.createTicket(ticket); return "redirect:/tickets"; }


Podrías hacerlo:

<select> <option th:each="state : ${T(com.mypackage.Ticket.State).values()}" th:value="${state}" th:text="${state}"> </option> </select>