如何使用Spring MVC将List中的项绑定到formAttribute

时间:2014-11-21 00:31:59

标签: java spring jsp spring-mvc

我已经搜索过,无法找到类似的东西,或者我正在寻找错误的东西。我从我的控制器返回一个项目列表,以便在我的jsp中显示。在我的jsp表中,我希望列表中的每个项目都有一行,如下所示:

<tbody>
   <c:forEach items="${productList}" var="product" varStatus="status">
      <tr>
         ???? This next line is seudo-code. I dont know how to bind the item to form ???
         <form:form method="post" modelAttribute="${productList}[status.index]">  
             <td><form:input path="price" class="input-mini" type="text" /></td>
             <td><button id="save" name="save"></td>
         </form
      </tr>
   </c:forEach>
</tbody>

然后我的控制器会有一个RequestMethod.POST来处理保存操作。这可能吗?如果是这样,有人可以帮我指出正确的方向。

这是否可能我不知道如何将列表中的项绑定到表单。

2 个答案:

答案 0 :(得分:3)

根据@tofindabhishek的建议并仍然希望允许每行编辑,我最终实现了一个带有行内按钮的解决方案,用于保存,编辑和删除每一行,并将文章ID传递回控制器。这是我的桌子。它使用数据表,bootstrap并打开完整编辑表单的模态。总共提供了一个非常丰富的CMS IMO:

<tbody>
    <c:forEach items="${productManagerForm.products}" var="product" varStatus="status">
        <c:url value="/product/detail/${product.id}" var="detailUrl" />
        <tr>
           <td><a href="${detailUrl}">${product.id}</a> <form:hidden path="products[${status.index}].id" value="${product.id}" /></td>
           <td><form:input path="products[${status.index}].name" class="input-xlarge" type="text"/></td>
           <td><form:input path="products[${status.index}].price" class="input-mini" type="text" /></td>
           <td><form:input path="products[${status.index}].shippingPrice" class="input-mini" type="text" /></td>
           <td><button id="save" name="save" value="${product.id}" class="btn btn-success"><i class="fa fa-save"></i> Save </button>
                <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#editProduct${product.id}"><i class="fa fa-edit"></i> Edit</button>
                <button id="delete" name="delete" value="${product.id}" class="btn btn-danger"><i class="fa fa-trash-o"></i></button>
           </td>
        </tr>
   </c:forEach>
</tbody>

screenshot of table

这是我的POST处理程序,你可以看到我如何使用RequestMapping映射处理程序和RequestParam来绑定Id:

@RequestMapping(method = RequestMethod.POST, params = "delete")
public String deleteProduct(@RequestParam(value = "delete") int deleteProductId) {
   Product product = productService.findProduct(deleteProductId);
   productService.deleteProduct(product);
   ...
}

答案 1 :(得分:1)

<tbody>
 <form:form method="post" modelAttribute="${productList}">  
   <c:forEach items="${productList}" var="product" varStatus="status">
      <tr>      
             <td><form:input path="{productList[[${status.index}].price}" class="input-mini" type="text" /></td>
             <td><button id="save" name="save"></td>
         </form
      </tr>
   </c:forEach>
</tbody>

此代码将提交表单以及产品列表,在帖子中您需要编写逻辑以保存产品列表。 如需进一步帮助,请参阅以下链接。

http://viralpatel.net/blogs/spring-mvc-multi-row-submit-java-list/