当前位置: 首页 > 知识库问答 >
问题:

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

湛玄裳
2023-03-14

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

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

模板如下所示:

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

之后,应将其转换为如下内容:

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

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

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

  return "redirect:/tickets";
}

共有3个答案

能钟展
2023-03-14

这对我很有用:

Java:

public enum RoleEnum {
    SUPER_ADMIN("SUPER_ADMIN"),
    RESTAURANTE_ADMIN("RESTAURANTE_ADMIN");

    private final String roleCode;

    private RoleEnum(String roleCode) {
        this.roleCode = roleCode;
    }
}

百里香叶:

<select class="form-control" id="val-skill" name="role_id">
    <option th:each="role : ${T(com.users.enumeration.RoleEnum).values()}" th:value="${role}" th:text="${role}"></option>
</select>
杨宏儒
2023-03-14

此外,如果要将枚举序号名称与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文件中:

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

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

楮景明
2023-03-14

您可以:

<select>
    <option th:each="state : ${T(com.mypackage.Ticket.State).values()}"
            th:value="${state}"
            th:text="${state}">
    </option>
</select>
 类似资料:
  • 问题内容: 我有一个具有枚举属性的域对象,并且我想以该对象的形式显示一个包含所有可能的枚举值的下拉列表。想象以下对象: 在我的控制器中,我有一个方法呈现此对象的形式: 模板如下所示: 稍后,应将其转换为如下形式: 如何创建选择标签?所选值还应该自动映射到票证,以便我可以在控制器中执行以下操作: 问题答案: 您可以这样做:

  • 问题内容: 我需要使用字符串列表中的所有值填充下拉列表。 控制器类 我不知道从哪里开始HTML,所以我从这里开始 我的html / controller应该如何将列表的所有元素添加为下拉选项? 提前致谢! 问题答案: 这就是我填充下拉列表的方式。我认为这可能有助于你了解它。 Controller Model View

  • 我已经用来自我的spring控制器(provincia)的内容填充了一个列表,并且我有另一个对象(profile2),我需要从(provincia)获取选定的值...以及我的表单国家/地区中的其他值,等等。 在我的HTML中,我有: 但是我找不到任何关于如何提取与列表中的值相对应的选定键和值(th:select)并将其放回控制器(或者将其移入具有provincia有线对象的de profile2对

  • 我的问题是无法得到下拉列表选择的值,错误是: 字段“admin”上对象“agence”中的字段错误:拒绝值[1];代码[TypeMismatch.agence.admin,TypeMismatch.admin,TypeMismatch.com.example.demo.Entities.AdminStrateur,TypeMismatch];;默认消息[无法将“java.lang.String”类

  • 我试图让枚举显示友好的名称从描述(或任何其他属性)在招摇和响应。还试图解析的友好名称设置在主体/查询字符串在控制器的行动,而不尝试400 Bad请求或任何类型的验证错误。我还注意到的是,自定义的通用JsonConver我也没有正常工作。方法根本没有被调用。我如何让它工作? 我正在尝试让swagger-ui显示asc 要么swagger ui抛出客户端验证,并用红线突出显示字段 或者,如果我尝试在s

  • 我有一个显示sql连接列表的页面。该表中的一个字段是databaseType,它在枚举中定义: 为了创建和编辑对象,我在选择框中填充以下内容: 填充该表单的DTO对象是: 问题是所有字符串字段都是持久化的,而不是复杂类型的字段。 列出所有创建对象的表定义为: 渲染出来的是: 在开始使用Thymeleaf之前,我使用的是JSP,表定义非常相似,我得到了databaseType值,没有任何问题。 切换