簡體   English   中英

Spring MVC注釋@ModelAttribute

[英]Spring MVC annotation @ModelAttribute

我對Spring MVC注釋@ModelAttribute有一些疑問。 在名為“addProduct”的第一個方法中,我創建了Model模型,在調用model.addAttribute之后,我可以在jsp文件中使用“product”名稱,例如product.getProductPrice。 但在第二個方法命名與第一個相同,我添加參數“@ModelAttribute(”product“)產品”,但為什么?? 如果我刪除這個注釋,我的程序和以前一樣工作,請解釋我)非常感謝,對不起我的英語,我來自烏克蘭)

@RequestMapping("/admin/productInventory/addProduct")
public String addProduct(Model model) {
    Product product = new Product();
    // add default for radio button!
    product.setProductCategory("Mobile Phone");
    product.setProductCondition("New");
    product.setProductStatus("active");

    model.addAttribute("product", product);

    return "addProduct";
}

@RequestMapping(value = "/admin/productInventory/addProduct", method = RequestMethod.POST)
public String addProduct(@ModelAttribute("product") Product product, HttpServletRequest request) {
    productDao.addProduct(product);

    MultipartFile productImage = product.getProductImage();
    String rootDirectory = request.getSession().getServletContext().getRealPath("/");
    System.out.println(rootDirectory);
    // product id as the file name
    // !!!! TODO
    // path = Paths.get(rootDirectory + "/WEB-INF/resources/image/" +
    // product.getProductId() + ".png");

    path = Paths.get("F:\\Spring\\eMusicStore\\src\\main\\webapp\\WEB-INF\\resources\\images\\"
            + product.getProductId() + ".png");

    if (productImage != null && !productImage.isEmpty()) {
        try {
            productImage.transferTo(new File(path.toString()));
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("Product image saving failed", e);
        }
    }
    return "redirect:/admin/productInventory";
}

目的@ModelAttribute是從請求模型對象綁定param / properties,比如說@ModelAttribute("person") Person person方法中的@ModelAttribute("person") Person person ,它將綁定從對象這樣的名稱,age到Person的屬性,並從中構造一個對象。 它不會向您的視圖傳遞任何內容,一旦提交請求,作業就會完成。 沒有進行到該行動的觀點。

相反,當您擁有Model model您將顯式構造一個對象,並將屬性添加到其屬性中。 與上面的@ModelAttribute不同,它將被帶到您的視圖中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM