Spring MVC注释@ModelAttribute

时间:2016-11-06 22:29:29

标签: java spring model-view-controller

我对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";
}

1 个答案:

答案 0 :(得分:2)

目的@ModelAttribute是从请求模型对象绑定param / properties, 在你的方法中说@ModelAttribute("person") Person person,它会绑定对象的属性,例如name,age到Person,并从中构造一个对象。它不会向您的视图传递任何内容,一旦提交请求,作业就会完成。没有进行到该行动的观点。

相反,当你有Model model时,你明确地构建了一个属性添加到其属性的对象。与上面的@ModelAttribute

不同,它会被移到您的视野中