Я новичок в Thymeleaf и пробовал все возможные решения и обходные пути из Интернета. Отчаянно мне нужна помощь, чтобы понять, что здесь не так.
Невозможно получить значение объекта корзины (тимелеафа), обновленное с html до MVC контроллера. вместо этого поля объекта CartViewModel (userI и продукты) в объектах cart и modelMap становятся пустыми. даже он не получает значений, которые я передал для заполнения таблицы в предыдущем вызове.
Любая помощь приветствуется. Заранее благодарим за ваше драгоценное время.
Статус отладки контроллера
Код контроллера:
@Controller
public class MyController {
@Autowired
IProductService productService;
@Autowired
IVendorService vendorService;
@RequestMapping(value = "/", method = {RequestMethod.GET})
public String getVendors(VendorViewModel vendorViewModel, final ModelMap modelMap) {
modelMap.addAttribute("vendors", vendorService.getVendors());
return "home";
}
@RequestMapping(value = "/inventory", method = {RequestMethod.POST})
public String getProductsForSelectedVendor(VendorViewModel vendorViewModel, final ModelMap modelMap) {
modelMap.addAttribute("vendors", vendorService.getVendors());
modelMap.addAttribute("cart", new CartViewModel("Nish", productService.getProductsByVendor(vendorViewModel.getId())));
return "home";
}
@RequestMapping(value = "/cart", method = {RequestMethod.POST})
public String saveCart(@ModelAttribute(name = "cart") CartViewModel cart, ModelMap modelMap, BindingResult bindingResult) {
**//not able get cart object value set in html via thymeleaf. **
return "cart";
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@JsonIgnoreProperties(ignoreUnknown = true)
public class CartViewModel {
private String userId;
//private List<ProductSelected> products;
private List<ProductViewModel> products;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@JsonIgnoreProperties(ignoreUnknown = true)
public class ProductViewModel
{
public String id;
public int qty = 0;
public String handle;
public String title;
public String bodyHTML;
public String vendor;
public String type;
public String tags;
public String variantPrice;
public String imageSrc;
public String imageAltText;
}
<div class="container-main">
<form method="POST" enctype="multipart/form-data" th:object="${vendorViewModel}" th:action="@{/inventory}">
<div>
<div style="float:left;padding-left:10px;">
<label for="selectVendor" class="input-label-name">Select Vendor</label>
</div>
<div style="float:left;padding-left:10px;">
<select id="selectVendor" required="required" th:field="*{id}" style="width:90%">
<option value=""></option>
<option th:each="vendor, iSat : ${vendors}" th:value="${vendor.id}" th:with="test=${vendor.name}" th:text="${vendor.name}">
</option>
</select>
</div>
<div style="float:left;padding-left:10px;">
<input type="submit" value="Get Products" class="btn">
</div>
</div>
</form>
<form method="POST" action="#" role="form" enctype="multipart/form-data" th:action="@{/cart}" th:object="${cart}">
<!-- https://stackoverflow.com/questions/49462788/how-to-post-a-list-to-controller-in-thymeleaf-->
<div style="padding-top: 50px;">
<table id="productTable" class="tableBodyScroll">
<tr>
<th>Quantity</th>
<th>QtyPrice</th>
<th>Handle</th>
<th>Title</th>
<th>Type</th>
<th>Tags</th>
<th>Price</th>
<th>Image</th>
<!-- <th>IN STOCK</th>-->
</tr>
<tr th:id="${prod.id}" th:each="prod,iterStat : ${cart.products}" th:class="${iterStat.odd}? 'odd'">
<td><span class="table-add"><button th:id="'add_' + ${prod.id}" type="button" class="btn btn-rounded btn-sm my-0">+</button></span>
<span type="text" th:id="'count_' + ${prod.id}" th:field="*{products[__${iterStat.index}__].qty}">0</span>
<span class="table-remove"><button th:id="'remove_' + ${prod.id}" type="button" class="btn btn-danger btn-rounded btn-sm my-0">-</button></span>
</td>
<td><span th:id="'qtyPrice_' + ${prod.id}">0</span></td>
<td th:text="${prod.handle}"></td>
<td th:text="${prod.title}"></td>
<td th:text="${prod.type}"></td>
<td th:text="${prod.tags}"></td>
<td th:id="'price_' + ${prod.id}" th:text="${prod.variantPrice}"></td>
<td><img height="50px" width="100px" th:src="${prod.imageSrc}" th:title="${prod.title}" th:alt="${prod.imageAltText}" /></td>
<!-- <td th:text="${prod.inStock}? #{true} : #{false}">yes</td>-->
</tr>
</table>
</div>
<div style="float:left;padding-left:10px;">
<input type="submit" value="Go to Cart" class="btn">
</div>
</form>
</div>