Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Spring和Thymeleaf在下拉列表中显示所有可能的枚举值?_Java_Spring_Thymeleaf - Fatal编程技术网

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

Java 如何使用Spring和Thymeleaf在下拉列表中显示所有可能的枚举值?,java,spring,thymeleaf,Java,Spring,Thymeleaf,我有一个具有枚举属性的域对象,我想在该对象的表单中显示一个包含所有可能枚举值的下拉列表。想象以下对象: public class Ticket { private Long id; private String title; private State state; // Getters & setters public static enum State { OPEN, IN_WORK, FINISHED } } 在我的控制器中,我有一个为

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

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>
你可以做:


此外,如果要将枚举序号名称与GUI中显示的字符串分开,请添加其他属性,例如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。

这对我很有用:

爪哇:

百里香:

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


T的用途是什么?它是spring EL语法,用于访问类型并调用静态方法或获取其中的静态属性。请参见
th:value=${{state}}
使用转换标记给我java.lang.IllegalArgumentException:Iteration变量不能为null我们如何通过重写toString获得相同的结果,或者我们不能?@atas是的,您可以在默认情况下重写toString()@Clint
“${state}”
调用toString(),因此重写toString()没有帮助。我试图使用
th:value=“${state.name}”
但是我得到了一个解析错误
<select>
  <option th:each="state : ${T(com.mypackage.Ticket.State).values()}" th:value="${state}" th:text="${state.displayName}"></option>
</select>
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>