提交POST对象

时间:2016-09-11 18:58:52

标签: spring jsp

我花了整个周末在网上搜索我的问题。似乎我错过了一些非常愚蠢的东西,但我没有把它拿起来。

这是问题所在。我向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 =

那些是空的输出......:'(

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

1 个答案:

答案 0 :(得分:0)

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

我们非常担心“隐藏”一词也意味着“忽略”或“原样离开”。但无论如何,上面的解决方案完全符合我的要求。

感谢社区