У меня есть объект «InfoItem», который отображается в виде. В Controller AI добавляю модель и отображаю в View A.
Object
public class InfoItem {
private boolean level = false;
private InfoDtc infoDtc = null;
private String name = "";
}
Wrapper Class для отправки списка объектов и полученияпосле редактирования
public class InfoItemCreationDto {
private List<InfoItem> infoItemList = new ArrayList<>();
public void addInfo(InfoItem infoItem) {
this.infoItemList.add(infoItem);
}
// getters and setters
}
Код контроллера
@GetMapping("info")
public String getInfo(Model model, @PathVariable Integer item) {
// code to get response from backend
for (InfoItem ii : response) {
infoItemCreationDto.addInfo(ii);
}
model.addAttribute("form", infoItemCreationDto);
model.addAttribute("infoItemList", response); // i can see this in view, but i want to use above model 'form' from wrapper class
return "A";
}
В Просмотр A этот объект отображается в форме, тогда это необходимоОтредактировано и сохранено в БД.
<form action="#" th:action="@{/uploadInfo}" th:object="${forms}" method="post">
<div class="form-group">
<div class="list-group"
th:each="info , itemStat :${infoItemList}">
<div th:if="${info.isLevel()}">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">
<span th:text="${info.getName()}"> Title </span>
</h6>
</div>
</div>
<div th:if="${info.getInfoDtc().getInfoType()} eq 'C'" >
<div class="form-group">
<select class="form-control selectpicker" th:name="|{infoItemList[__${itemStat.index}__].infoDtc.infoType}|">
<option value="1">Cat</option>
<option value="2">dog</option>
</select>
</div>
</div>
<input type="submit" value="Submit"
class="btn btn-info"/>
</div>
</form>
В представлении Строка 4, th:each="info , itemStat :${infoItemList}">
показывает элементы, но я не могу отредактировать и отправить значение контроллеру. Я перешел по ссылке https://www.baeldung.com/thymeleaf-list
они используют класс-оболочку для отправки списка объектов и получения. Я тоже пытаюсь это использовать, но это не работает. Итак, как связать список объектов из представления в контроллер? Это неправильный способ привязки к списку: th:name="|{infoItemList[__${itemStat.index}__].infoDtc.infoType}|"