В моем приложении Spring Boot у меня есть следующее RequestMapping
:
@GetMapping("/test")
public String get(Model model) {
List<CustomItem> items = itemService.findAll();
model.addAttribute("items", items);
return "test";
}
Я отображаю эти элементы в простой таблице HTML (одна строка для одного элемента).
Я бы хотел добавить кнопку в каждую строку, которая отправляет только соответствующую CustomItem
конечной точке примерно так:
@PostMapping("/test")
public String post(CustomItem item) {
// doing something with item
return "redirect:/test";
}
Я пытался создать отдельный form
для каждой строки:
<table>
<tr th:each="item, stat : ${items}">
<td>
<form th:object="${items[__${stat.index}__]}" th:action="@{/test}" method="post">
<input type="text" th:field="${items[__${stat.index}__].someField}">
<button type="submit">Submit</button>
</form>
</td>
</tr>
</table>
Но я получаю следующую ошибку при переходе на страницу:
Ни BindingResult, ни простой целевой объект для имени компонента 'items [0]'
доступно как атрибут запроса
Я также попробовал следующее:
<table>
<tr th:each="item, stat : ${items}">
<td>
<form th:object="${item}" th:action="@{/test}" method="post">
<input type="text" th:field="*{someField}">
<button type="submit">Submit</button>
</form>
</td>
</tr>
</table>
В этом случае ошибка следующая:
Ни BindingResult, ни простой целевой объект для имени компонента 'item'
доступно как атрибут запроса
Я не могу понять, что не так с моим подходом, поэтому я очень признателен за любой совет.
EDIT:
Как @ StefanEmanuelsson предположил, что я пытался опустить атрибут th:object
:
<table>
<tr th:each="item, stat : ${items}">
<td>
<form th:action="@{/test}" method="post">
<input type="text" th:field="${items[__${stat.index}__].someField}">
<button type="submit">Submit</button>
</form>
</td>
</tr>
</table>
Таким образом, страница загружается просто отлично, но при отправке формы значение someField
в полученном (?) CustomItem
в контроллере равно null
.