在Spring MVC中,ModelAttribute在控制器中返回空值

好了,该寻求帮助了。我正在向我的jsp发送一个(购物)购物车ModelAttribute,允许用户编辑数量,当Model为POST到控制器时,除可编辑(数量)字段外,这些字段为null。我已经针对类似的问题进行了数天的研究,但没有匹配的结果。我正在使用Spring

3.1。

这是我在GET和POST上的控制器:

@Controller

public class CartController {

@Autowired

private Cart cart;

@RequestMapping(value = "/cart", method = RequestMethod.GET)

public String showCart(Model model) {

logger.debug("CartController.showCart() Cart: {}", this.cart);

model.addAttribute(cart);

return "cart/cart";

}

和开机自检

   @RequestMapping(value = "/cart", method = RequestMethod.POST, params = "update")

public String update(@ModelAttribute("cart") Cart cart, BindingResult result, Model model) {

logger.debug("CartController.update() Cart: {}", cart);

return "cart/cart";

}

我的jsp:

<div class="container MainContent">

<form:form method="POST" modelAttribute="cart">

<fieldset>

<legend>Cart</legend>

<table class="table">

<thead>

<tr>

<th>Product Name</th>

<th>Quantity</th>

<th>Product Price</th>

</tr>

</thead>

<tbody>

<c:forEach items="${cart.cartDetails}" var="cartDetail" varStatus="status">

<tr>

<td>${cartDetail.product.name}</td>

<td><form:input path="cartDetails[${status.index}].quantity" size="1" /></td>

<td>${cartDetail.price}</td>

</c:forEach>

<tr>

<b><td colspan="2" align="right"><spring:message code="order.total" /></b>

</td>

<td>${cart.totalCartPrice}</td>

</tr>

</tbody>

</table>

</fieldset>

<div></div>

<button id="order" name="order">

<spring:message code="button.order" />

</button>

<button id="update" name="update">

<spring:message code="button.update" />

</button>

</form:form>

</div>

以及GET之前的cart的日志结果:

CartController.showCart()购物车:购物车[cartDetails =

[CartDetail产品=com.Product@c26440 [名称=我的名字],数量= 1]],总计CartPrice = 10.00]

然后将jsp中的数量从1更新为3,然后将其发布到控制器:

CartController.update()购物车:购物车[cartDetails = [CartDetail [产品= null,数量=

3]],totalCartPrice = null]

我已经在这里和Spring论坛上阅读了几篇类似的文章,并尝试了不同的建议解决方案,但都没有碰到运气。看来我编辑的数量结果正确地绑定到对象,但是为什么其他不呢?

回答:

假设您在Form对象中具有所有必需的字段;

您必须指定表单字段,并用数据填充值。

<td>${cartDetail.product.name}</td>

只会将结果打印到屏幕上。如果要将其绑定到表单,则必须将其放入spring表单输入中,例如:

<form:input path="productName"  value="${cartDetail.product.name}"/>

如果您不希望它是可编辑的,则可以将其放入隐藏字段中,但最后必须将其放入jsp的form元素中,并在表单POJO中包含一个对应的字段

以上是 在Spring MVC中,ModelAttribute在控制器中返回空值 的全部内容, 来源链接: utcz.com/qa/398800.html

回到顶部