Neither BindingResult nor plain target object for bean name 'user' available as request attribute
Ну, по порядку) Из контроллера на страницу идут список пользователей и список всех имеющихся ролей из базы.
modelMap.addAttribute("users", userService.getUserList());
modelMap.addAttribute("roles", roleService.getRoleList());
У пользователя есть одна или две роли. Все это отображается в таблице таким образом:
<tbody>
<tr th:each="user:${users}">
<td th:text="${user.name}"></td>
<td th:text="${user.password}"></td>
<td>
<div th:each="role:${user.roles}">
<a th:text="${role.role}"></a>
</div>
</td>
...
</tbody>
Задача такая, что у каждого пользователя есть модальное окно, в котором есть форма, в которой можно редактировать его данные, включая роли. То есть, рядом со списком ролей между тегами есть кнопка, открывающая это модальное окно, в котором такая форма:
<form action="#"
th:action="@{/admin/update/{id}(id=${user.id})}"
th:method="post">
<div class="text-center form-group">
<label for="id"><b>Id</b></label>
<input type="text" readonly="readonly" name="id" id="id"
required class="form-control" th:value="*{user.id}">
</div>
<div class="text-center form-group">
<label for="name"><b>First name</b></label>
<input type="text" name="name" id="name"
required class="form-control" th:value="*{user.name}">
</div>
<div class="text-center form-group">
<label for="password"><b>Password</b></label>
<input type="password" name="password" id="password"
required class="form-control" th:value="*{user.password}">
</div>
<div class="text-center form-group">
<label><b>Role</b></label>
<div>
<label>
<select th:field="*{user.roles}" multiple="multiple">
<option value=""></option>
<option th:each="r:${roles}"
th:value="${r.role}"
th:utext="${r.role}"></option>
</select>
</label>
</div>
</div>
<div class="modal-footer">
<div class="form-group">
<button class="btn btn-dark" data-dismiss="modal">Close</button>
<input type="submit" name="submit" value="Edit"
class="btn btn-primary pull-right">
</div>
</div>
</form>
Беда в том, что в этом случае
th:field="*{user.roles}"
вываливается исключение как в заголовке. Насколько я понял, такой синтаксис: "*{...}" подразумевает обращение к объекту в этом примере кода:
<tr th:each="user:${users}">
причем так оно и есть, ведь в окне, если там нет выбора ролей, выводятся айдишник пользователя с именем и паролем для редактирования без исключительных ситуаций. При попытке задействовать выбор все валится. Скорее всего, что-то где-то упущено, но я этого не вижу. В общем нужна помощь)