Spring + Thymleaf : Checkbox Object mappen

8u3631984

Bekanntes Mitglied
Hallo zusammen.

Kurz zu dem was ich vorhabe :
Ich möchte gerne einen User anlegen und diesem eine / mehrere Rollen zuweisen.
Hier mein Code :
Java:
@Data
@ToString
public class User {

    private Set<Role> roles = new HashSet<>();

}

Java:
@Data
@ToString
public class Role {

    private Integer id;
    private String name;
}

[CODE lang="java" title="USerController"]@Controller
public class UserController {

@GetMapping("/users/new")
public ModelAndView newUser() {
User user = new User();
ModelAndView mav = new ModelAndView("user_form");
mav.addObject("user", user);

Role role1 = new Role();
role1.setId(1);
role1.setName("ROLE 1");

Role role2 = new Role();
role2.setId(2);
role1.setName("ROLE 2");

Role role3 = new Role();
role3.setId(3);
role1.setName("ROLE 3");

List<Role> roles = Lists.newArrayList(role1, role2, role3);

mav.addObject("allRoles", roles);

return mav;
}

@PostMapping("/users/save")
public String saveUser(@ModelAttribute User user){

System.out.println("save user : " + user);
return "user_form";
}[/CODE]

[CODE lang="html" title="user form"]<body>

<form th:action="@{/users/save}" th😱bject="${user}" method="post">
<p>
<label>Roles:
<input type="checkbox" name="roles"
th:each="role : ${allRoles}"
th:text="${role.name}"
th:value="${role.id}"
th:field="*{roles}"
/>
</label>
</p>

<input type="submit" id="submitButton" th:value="Save">
<input type="reset" id="resetButton" name="reset" th:value="Reset"/>
</form>
</body>[/CODE]

Wenn ich nun die Seite localhost:8080/users/new aufrufe erscheint das Eingabe Formular.
Wenn ich nun Speichere ruft er die Funktion saveUser im Controller auf. Allerdings erhalte ich dann folgende Exception :

Field error in object 'user' on field 'roles': rejected value [1]; codes [typeMismatch.user.roles,typeMismatch.roles,typeMismatch.java.util.Set,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [user.roles,roles]; arguments []; default message [roles]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Set' for property 'roles'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'entity.Role' for property 'roles[0]': no matching editors or conversion strategy found]]

Ich vermute mal, dass er aus dem String (Role ID) kein Role Object bauen kann ?!
Wenndas stimmt wie macht man es richtig ?

Ich habe mich an einem Beispiel hier orientiert.

Vielen Dank für eure Hilfe
 

Neue Themen


Zurück
Oben