2016-09-11 17 views
-1

我花了整个周末在我的问题上搜索网络。看起来我错过了一些非常愚蠢的东西,但是我没有把它拿起来。提交POST对象

这是问题所在。我向JSP发送了一个对象,在JSP上我可以看到它的内容。我他们我提交了表格。回到控制器中,它显示对象被覆盖/重新创建。我似乎无法理解。我查了我的Tomcat的日志,但我没有看到任何错误...

在我的控制器:

@RequestMapping(value = {"/", "/home"}, method = RequestMethod.GET) 
public String homePage(ModelMap model) { 
    model.addAttribute("user", getPrincipal()); 


    Catalog catalog = catalogService.getCatalogByCategory(Catalog.CatalogCategory.ALL); 

    model.addAttribute("catalog", catalog); 
    model.addAttribute("numberOfItemsAdded", "500"); 
    return "welcome"; 
}` 

,在我的JSP我有以下几点:

<form:form method="POST" modelAttribute="catalog"> 
      <form:hidden path="id"/> 

      <div id="products" class="row list-group"> 
       <c:forEach var="orderItem" items="${catalog.orderItems}"> 

        <div class="item col-xs-4 col-lg-4"> 
         <div class="thumbnail"> 
          <img class="group list-group-image" src="http://placehold.it/400x250/000/fff" alt=""/> 

          <div class="caption"> 
           <h4 class="group inner list-group-item-heading"> 
             ${orderItem.name}</h4> 

           <p class="group inner list-group-item-text"> 
             ${orderItem.description} 
           </p> 

           <div class="row"> 
            <div class="col-xs-12 col-md-6"> 
             <p class="lead"> 
              R ${orderItem.price}</p> 
            </div> 
            <div class="col-xs-12 col-md-6"> 
             <label for="${orderItem.id}" class="btn btn-primary">Add to Cart <input 
               type="checkbox" id="${orderItem.id}" name="orderItem.addedToCart" 
               class="badgebox"><span class="badge">&check;</span></label> 
            </div> 
           </div> 
          </div> 
         </div> 
        </div> 
       </c:forEach> 
      </div> 

      <div class="row"> 
       <div class="form-group"> 
        <div class="col-sm-12 pull-right"> 
        </div> 
        <div class="col-sm-2 pull-right"> 

         <input type="submit" 
           class="btn btn-default btn-block btn-primary" 
           value="Next" name="action" formmethod="POST" 
           formaction="confirmList"/> 

        </div> 
       </div> 
      </div> 
     </form:form>` 

压后“下一个”,它的形式数据提交给一控制器:

@RequestMapping(value = "/confirmList", method = RequestMethod.POST) 
public String confirmList(@ModelAttribute Catalog catalog, @ModelAttribute String numberOfItemsAdded) { 
    System.out.println("\n\n------>catalog = " + catalog); 
    System.out.println("\n\n------>numberOfItemsAdded = " + numberOfItemsAdded); 
    List<OrderItem> selectedItems = new ArrayList<OrderItem>(); 
    for (OrderItem orderItem : catalog.getOrderItems()) { 
     if (orderItem.isAddedToCart()) { 
      selectedItems.add(orderItem); 
     } 
    } 
    //model.addAttribute("numberOfItemsAdded", selectedItems.size()); 
    return "welcome"; 
} 

`

System.out.println(...)输出如下:

------>catalog = Catalog{id=1, name='null', category='null', orderItems=null} 


------>numberOfItemsAdded = 

这些都是空的输出....:'(

我不知道我在做什么错在这里.....

+2

,我可以看到,只有目录的ID绑定,则其余字段为空,因为你没有在形式结合他们。你需要以和id一样的方式来绑定它们,例如使用弹簧形式标签,例如等等。关于numberOfItemsAdded,不要将它作为@ModelAttribute传递,它已经在GET方法的ModelMap中,所以你可以在Post方法中从modelMap中检索它 – george

+0

非常感谢你,乔治!这完全解决了我的问题!再次感谢你! –

+0

此问题是由于无法再现问题或简单的印刷错误造成的。虽然类似的问题可能在这里讨论,但这个问题的解决方式不太可能有助于未来的读者。这通常可以通过识别并密切检查在发布之前重现问题所需的最短程序来避免。 –

回答

0

乔治在评论栏中回答了这个问题。我所要做的就是隐藏/绑定那些空字段。

我们使用术语“隐藏”也意味着“忽略”或“保持原样”,这非常令人担忧。但无论如何,上述解决方案完全符合我的要求。

感谢社会