0
사용자 관리를위한 UI를 작성하려고하는데 중요한 역할 중 하나는 사용자 역할을 변경하는 것입니다.수정 된 데이터를 얻기 위해 Thymeleaf의 확인란 목록을 바인딩 할 수 없습니다. 다시 게시되었습니다.
모델은 간단하며 사용자는 많은 역할에 속하며 역할에는 많은 사용자가 있습니다.
아래의 코드는 자기가 기존 사용자 편집 @Controller를 포함 제시:
@Controller
public class NewController {
final Role r1 = new Role("admin");
final Role r2 = new Role("user");
final Role r3 = new Role("editor");
final List<Role> allRoles = Arrays.asList(r1, r2, r3);
final List<Role> userRoles = Arrays.asList(r3);
@RequestMapping(value = "/edit", method = RequestMethod.GET)
public ModelAndView editUser() {
final User user = new User();
user.setEmail("[email protected]");
user.setUsername("username");
user.setAuthorities(userRoles);
final ModelAndView mav = new ModelAndView("edit");
allRoles.stream()
.filter(r-> user.getAuthorities().contains(r))
.forEach(r -> r.setChecked(true));
mav.addObject("roles", allRoles);
mav.addObject("user", user);
return mav;
}
@RequestMapping(value = "/edit", method = RequestMethod.POST)
public ModelAndView updateUser(
@ModelAttribute("user") User user,
@ModelAttribute("roles") ArrayList<Role> roles,
ModelMap model) {
final List<Role> newRoles = roles.stream()
.filter(r -> r.isChecked() != null)
.filter(r -> r.isChecked() == true)
.collect(Collectors.toList());
user.setAuthorities(newRoles);
return new ModelAndView("redirect:/edit");
}
}
을 그리고 내가 사용자 편집 할 수있어 내 스프링 Thymeleaf 페이지의 :
<form th:action="'/edit'" method="POST" enctype="utf8">
<div class="form-group row">
<label class="col-sm-3" th:text="#{label.user.id}">Id</label>
<span class="col-sm-5" th:text="${user.id}">id</span>
</div>
<div class="form-group row">
<label class="col-sm-3" th:text="#{label.user.username}">Username</label>
<input class="form-control" name="username" th:value="${user.username}" required="required"/></span>
</div>
<div class="form-group row">
<label class="col-sm-3" th:text="#{label.user.email}">email</label>
<input type="email" class="form-control" name="email" th:value="${user.email}"
required="required"/></span>
</div>
<div class="form-group row">
<label class="col-sm-3" th:text="#{label.user.password}">password</label>
<input id="password" class="form-control" name="password" value=""
type="password"/></span>
</div>
<div class="form-group row">
<label class="col-sm-3" th:text="#{label.user.confirmPass}">confirm</label>
<input id="matchPassword" class="form-control" name="matchingPassword" value=""
type="password"/></span>
</div>
<div th:each="item, index : ${roles}">
<input type="checkbox"
th:text="${item.authority}"
name="${item.authority}"
th:checked="${item.checked}" />
</div>
<button type="submit" class="btn btn-primary" th:text="#{label.edit.save}">save</button>
</form>
을
'저장'버튼을 클릭하면 updateUser
메소드가 실행되지만 ArrayList roles
은 비어 있습니다. 사용자 모델에 대한 다른 값이 올바르게 전달되고 사용자 이름/전자 메일/암호를 문제없이 변경할 수 있으므로 사용자 bean이 올바르게 채워집니다.