我正在创建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
。
答案 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) {