Господа Java-исты, вопрос к вам.
Юзаю Spring, Thymeleaf (SpringBoot2, Thymeleaf 5 - он же в СпрингБуте 2?)
Есть форма редактирования пользователя:
<form th:action="@{'/admin/users/'+${userForm.id}}" method="post" th:object="${userForm}">
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
<input type="hidden" name="lang" th:value="${#locale.language}"/>
<input type="hidden" name="id" th:value="${userForm.id}"/>
<!--roles-->
<div class="form-group">
<label for="roles" th:text="#{admin.user.roles}"></label>
<div id="roles">
<div th:each="role : ${roles}">
<input type="checkbox" th:field="*{roles[__${role.name}__]}" th:checked="${userForm.roles.get(role)}" th:disabled="${disabledRoles.contains(role)}"/>
<span style="padding-left: 10px;" th:text="${@translationService.translate(role)}">Role</span>
</div>
</div>
</div>
<div class="form-group">
<button class="btn btn-success" type="submit" th:text="#{admin.action.update.btn}"></button>
</div>
</form>
userForm передается такой объект, предварительно заполненный:
@Getter @Setter
public class UserForm extends BaseForm {
private String username;
private String realname;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;
private String phoneNumber;
private Long telegramChatId = 0L;
private Boolean deletedMark = false;
private Map<UserRole.ROLE, Boolean> roles = new HashMap<>();
private Long city;
}
В итоге имею вот такое: https://i.imgur.com/u67fnlO.png
Bсе бы хорошо, но!
Если переключить галки (снять, поставить), то все хорошо, на сервере в контроллер принимаются только взведенные галки:
@PostMapping("/{userId:\\d+}")
public String doUserEdit(@PathVariable(name = "userId") Long userId, UserForm userForm, Model model, Principal principal) {
//...
}
Но вот если жмякнуть Submit ничего не трогая, то отрендеренные как «checked» галки на сервер не отправляются.
Почему?