【问题标题】:Fill a model with the data of another model in Spring MVC在 Spring MVC 中用另一个模型的数据填充模型
【发布时间】:2016-05-17 13:09:58
【问题描述】:

我有一个使用我的"menuModel" 生成的.jsp 页面,现在在可视化此页面后,用户插入他/她的名字并单击Confirm My Order 按钮。

通过单击此按钮,我想将此menuModel 的数据复制到另一个名为“ordersModel”的模型中。由于这个ordersModel没有实例化,所以不知道如何将menuModel的数据复制到ordersModel中。

<form:form id="myOrderMenuId" action="${pageContext.request.contextPath}/OrderSent" method="post" commandName="ordersModel" >
            <c:forEach items="#{menuModel.foodList}" var="foodModel" varStatus="status">
                <c:if test="${foodModel.quantity != 0}">
                <!-- <form:hidden value='${foodModel.foodName}' path='orders[${status.index}].foodName'/>
                <form:hidden value='${foodModel.quantity}' path='orders[${status.index}].quantity'/> -->
                    <div>
                        <table class="itemList">
                            <tr>
                                <td style="width: 170px">
                                    <span id="foodNameId${foodModel.foodId}"><c:out value="${foodModel.foodName}"/></span>
                                </td>
                                <td>
                                    <span id="quantityId${foodModel.foodId}" style="margin-left: 110px;"><c:out value="${foodModel.quantity}"/></span>
                                </td>
                                <td>
                                    <span id="priceId${foodModel.foodId}" style="margin-left: 110px;"><c:out value="${foodModel.price}"/></span>
                                    <span> &euro;</span>
                                </td>
                                <td>
                                    <span class="eachPrice" id="totalPriceId${foodModel.foodId}" style="margin-left: 110px;"><c:out value="${foodModel.totalPrice}"/></span>
                                    <span> &euro;</span>
                                </td>
                            </tr>
                        </table>
                    </div>
                </c:if>
            </c:forEach>

            <span class="itemList" style="color: #80FF00; margin-left: -300px">Total:</span>
            <span id="totalPayment" class="itemList" style="color: #80FF00; margin-left: 5px"></span>
            <span class="itemList" style="color: #80FF00;"> &euro;</span><br/>
            <div class="itemList" style="margin-left:-1130px">Your Name: <input path="ownerName" name="orderName" class="myInbox" id="orderName"/></div>
            <button id="viewMyOrder" class="greyButton" style="position:relative; left: -530px">Confirm My Order</button>
</form:form>

这是我的OrdersModel

public class OrdersModel {

  private String ownerName;
  private List<Order> orders;

  //getters and setters
}

正如我在代码中评论的那样,如何将数据复制到ordersModel

更新

我的控制器如下所示:

@RequestMapping(value = "/myOrder", method = RequestMethod.POST)
public String viewMyOrder(Model model, 
        @ModelAttribute("menuModel")MenuModel menuModel) {
    logger.info("You are in view my order page.");

    List<FoodModel> foodModelList = new ArrayList<FoodModel>();
    for (FoodModel foodModel : menuModel.getFoodList()) {
        FoodModel foodModelNew = new FoodModel(); 
        if (foodModel.getQuantity()!=0){
            foodModelNew.setFoodId(foodModel.getFoodId());
            foodModelNew.setFoodName(foodModel.getFoodName());
            foodModelNew.setQuantity(foodModel.getQuantity());
            foodModelNew.setPrice(foodModel.getPrice());
            foodModelNew.setTotalPrice(foodModel.getQuantity() * foodModel.getPrice());
        }
        foodModelList.add(foodModelNew);
    }
    menuModel.setFoodList(foodModelList);
    return "myOrder";
}

@RequestMapping(value = "/OrderSent", method = RequestMethod.POST)
public String orderSent(@ModelAttribute("ordersModel")OrdersModel ordersModel, 
        @RequestParam("orderName") String owner, Model model) {
    logger.debug("Your order has been received");

    model.addAttribute("owner", owner);


    return "orderSent";
 }
}

【问题讨论】:

    标签: spring-mvc model-view-controller data-binding model controller


    【解决方案1】:

    为什么不在控制器中用FoodModels 填充OrdersModel.orders,然后渲染JSP?

    <form:form id="myOrderMenuId" action="${pageContext.request.contextPath}/OrderSent" method="post" commandName="ordersModel" >
                <c:forEach items="#{ordersModel.order}" var="foodModel" varStatus="status">
    
    ...
    

    控制器

    @RequestMapping(value = "/myOrder", method = RequestMethod.POST)
    public String viewMyOrder(Model model, @ModelAttribute("menuModel")MenuModel menuModel) {
        logger.info("You are in view my order page.");
    
        OrdersModel ordersModel = new OrdersModel()
    
        List<FoodModel> foodModelList = new ArrayList<FoodModel>();
        for (FoodModel foodModel : menuModel.getFoodList()) {
            Order foodModelNew = new Order(); 
            if (foodModel.getQuantity()!=0){
                foodModelNew.setFoodId(foodModel.getFoodId());
                foodModelNew.setFoodName(foodModel.getFoodName());
                foodModelNew.setQuantity(foodModel.getQuantity());
                foodModelNew.setPrice(foodModel.getPrice());
                foodModelNew.setTotalPrice(foodModel.getQuantity() * foodModel.getPrice());
            }
            ordersModel.add(foodModelNew);
        }
        model.addAttribute("ordersModel", ordersModel);
        return "myOrder";
    }
    

    【讨论】:

    • 感谢您的回复,为了更具体,我还添加了我的控制器,您能看看我的代码有什么问题吗? /myOrder 是我放截图的页面。我只想将 foodName 及其数量复制到 ordersModel。
    • 如果我理解得很好,你想把MenuModel复制到OrderModel.orders。最好的地方是Controller.viewMyOrder。这样orderSent() 将预先填充完整的对象。您也可以将MenuModel 放入会话中并手动将其复制到orderSent()
    • 但是你能解释一下把它放在Controller.viewMyOrder中的过程吗???再次感谢
    • 最后一件事,现在我将 ordersModel 添加到我的模型中,我想将它传递给“/OrderSent”控制器。我怎么能那样做?因为 model.addAttribute("ordersModel", ordersModel);已经在“/myOrder”控制器中完成,我希望它成为“/OrderSent”控制器的模型。
    • 您应该已经能够做到这一点。我的意思是,在 viewMyOrder() ordersModel 添加到模型中,在 jsp 中 commandName 引用 ordersModel: commandName="ordersModel" 并且控制器方法也有 ordersModel 作为 ModelAttribute: orderSent(@ModelAttribute("ordersModel")OrdersModel ordersModel
    猜你喜欢
    • 2014-11-15
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 2011-10-11
    • 2019-12-03
    相关资源
    最近更新 更多