如何使用Spring和Thymeleaf在下拉列表中显示所有可能的枚举值?

我有一个具有枚举属性的域对象,我想显示一个下拉列表,其中包含该对象表单中所有可能的枚举值。 想象一下以下对象:

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

在我的控制器中,我有一个方法,为这个对象呈现一个表单:

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

模板看起来像这样:

 

后来它应该转换成这样的东西:

 
OPEN IN_WORK FINISHED

如何创建选择标记? 所选值也应自动映射到票证,以便我可以在控制器中执行以下操作:

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

你可以这样做:

  

此外,如果要将枚举序号与GUI中显示的字符串分开,请添加其他属性,例如displayName

 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; } } 

在html文件中:

  

这将向用户显示displayName ,并允许您稍后以静默方式更改此字符串,而无需重构代码。 您可以通过这种方式添加更多属性:th:title