【问题标题】:How do I bind item from List to form modelAttribute using Spring MVC如何使用 Spring MVC 将 List 中的项目绑定到形成 modelAttribute
【发布时间】:2014-11-21 00:31:59
【问题描述】:

我已经搜索过,但找不到任何类似的东西,或者我正在寻找错误的东西。我正在从我的控制器返回一个项目列表,以便在我的 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 来处理保存操作。这可能吗?如果是这样,有人可以帮助我指出正确的方向。

这可能吗?我不确定如何将列表中的项目绑定到表单。

【问题讨论】:

  • 你想为每一行保存按钮,并单独保存每一行。
  • 是的,这将是对项目(产品)的有限字段集的“快速编辑”。为了提高最终用户的效率,我最终需要通过 AJAX 发布。从基本功能开始并遵循渐进增强技术。
  • this 可能会帮助你

标签: java spring jsp spring-mvc


【解决方案1】:

遵循@tofindabhishek 的建议,并且仍然希望允许每行进行编辑,我最终实现了一个解决方案,其中包含用于保存、编辑和删除每行的行内按钮,并将 post 上的项目 ID 传递回控制器。这是我的桌子主体。它使用数据表、引导程序并打开一个完整编辑表单的模式。共提供了一个非常丰富的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>

这是我的 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);
   ...
}

【讨论】:

    【解决方案2】:
    <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/)

    【讨论】:

    • 不完全是我想要的。鉴于必须保存整个列表,这似乎效率低下。谢谢你的例子。也许,按照这个示例,我将已更改的对象的 id 传递回控制器。 -我稍后再回帖
    猜你喜欢
    • 2013-01-16
    • 2017-05-25
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 2016-08-15
    • 2018-05-29
    • 2020-06-11
    相关资源
    最近更新 更多