我对
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并从中构造一个对象.它不会向您的视图传递任何内容,一旦提交请求,作业就会完成.没有进行到该行动的观点.
相反,当您拥有模型模型时,您将显式构造一个对象,并将属性添加到其属性中.与上面的@ModelAttribute不同,它将被带到您的视图中