我将“产品”对象传递给控制器时遇到了困难。我该怎么做?我没有收到错误。问题是我的控制器上的'product'对象为null。
HTML :
<section th:each="menu : ${allMenus}">
<button
<h1 th:text="${menu.name}"></h1>
</button>
<div>
<div th:each="product : ${menu.productList}">
<a data-toggle="modal" th:href="'#' + ${product.name} + 'Modal'">
h5 th:text="${product.name}"></h5>
<small th:text="${product.price} + '$'"></small>
<p th:text="${product.description}"></p>
</a>
<div th:replace="/productModal :: productModal(product=${product})"></div>
</div>
</section>
模态:
<div th:fragment="productModal(product)">
<div role="document">
<form method="post" th:action="@{/addItemToCart}">
<div th:each="topping : ${product.toppings}">
<input type="checkbox" th:id="${topping} + ${product.id}" name="checkedToppings" th:value="${topping}" />
<label th:for="${topping} + ${product.id}" th:text="${topping}"></label>
</div>
<div>
<button type="submit">Add to Shopping Cart</button>
</div>
</form>
</div>
</div>
控制器:
@RequestMapping(value="/addItemToCart", method=RequestMethod.POST)
public String addItemToCart(@ModelAttribute("product") Product product, @RequestParam("checkedToppings") List<String> toppings)
{
//product is null;
//checkedToppings are retrieved correctly
return "redirect:/menu";
}
答案 0 :(得分:0)
简短回答: 你不能使用HTML将对象发布到控制器。
详细说明: 你将永远无法发布&#34;产品&#34;从HTML页面反对控制器。 代替, 您应该发送有关所需&#34;产品的识别信息&#34;到控制器, 也许是产品ID或其他产品 - 独特 - 身份 - 布莱米。
对评论中的选项的回应: 黑客喜欢隐藏的领域和JavaScript; 我建议不要在这种情况下使用它们。 我相信你只有一个选择:识别信息。 这不需要是真实的&#34;产品编号。 您可以生成一个UUID并在选择一个中存储一个映射:( Servlet会话,数据库,应用程序会话,服务器上的其他位置),它从UUID映射到所需的产品。