从百万富翁复选框中设置java.util.Set的值

时间:2017-09-17 06:41:08

标签: java spring jpa thymeleaf

我正在创建Spring Boot应用程序。我有一个类User,我用Role类映射(ManyToMany)。

我在User类中有角色设定器:

public Set<Role> getRoles() {
    return roles;
}

public void setRoles(Set<Role> roles) {
    this.roles = roles;
}

从Controller我使用RoleRepository类来获取所有角色的名称。 我在html中迭代它并创建复选框:

<form th:object="${userForm}">
  <!-- userForm is coming from controller: -->
  <!-- model.addAttribute("userForm", new User()); -->
  <div class="checkbox" th:each="role: ${allroles.roleList}">
    <input th:field="*{roles}" type="checkbox" th:value="${role}">
    <input th:field="*{roles}" type="hidden" th:value="${role}">
    <td th:text="${role}"></td>
  </div>
</form>

我希望当我点击提交时,应该发送所选的角色,但它会返回null

1 个答案:

答案 0 :(得分:0)

您无需添加:

<input th:field="*{roles}" type="hidden" th:value="${role}"/>

它已经由Thymeleaf引擎管理。

该问题可能与 allroles.roleList 有关。您提到您仅获得角色的名称,并且您的用户需要一个Role对象列表。 请确保您在模型中放置了一个Role对象列表。

如果只想使用角色名称,则应使用以下命令创建另一个类UserForm:

public Set<String> getRoles() {
   return roles;
}

public void setRoles(Set<String> roles) {
   this.roles = roles;
}

为清楚起见,您应该以端点和Http方法的形式添加。 示例:

<form th:object="${userForm}" th:action="@{/user}" method="post">
   <div class="checkbox" th:each="role: ${allRoles}">
    <label th:text="${role.name}"></label>
    <input th:field="*{roles}" type="checkbox" th:value="${role}"/>
   </div>
   <input type="submit"/>
</form>

请确保您的控制器中具有@ModelAttribute

示例:

@PostMapping("/user")
public String submitUser(@ModelAttribute("userForm") User user) {