У меня есть вопрос о примечании MVC Spring @ModelAttribute. В первом методе, называемом «addProduct», я создаю модель модели и после вызова model.addAttribute я могу использовать имя «product» в jsp-файле, например product.getProductPrice. Но во втором методе, названном так же, как и первый, я добавил параметр «@ModelAttribute (« продукт ») Product product», но почему? Если я буду удалять эту аннотацию, моя программа работает так же, как и раньше, пожалуйста, объясните мне) Большое спасибо, извините за мой английский, я из Украины)Spring MVC annotation @ModelAttribute
@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";
}
Непонятно, что вы просите. В первом случае вы создаете «Продукт» внутри контроллера и помещаете его в модель. Во втором случае вы получаете информацию о продукте из содержимого запроса. (И, ради бога, не делайте жестких манипуляций с файлами так, как это! Если у вас есть *, чтобы иметь что-то подобное, используйте свойство с '@ Value', чтобы указать его.) – chrylis
Хотя он МОЖЕТ, похоже, работает то же самое в реальной жизни это не так. Особенно, когда вы начинаете использовать проверку или комбинируете с '@ SessionAttributes', вы увидите странное поведение. –