Ich habe eine Frage über Spring MVC Annotation @ModelAttribute. In der ersten Methode namens "addProduct" erstelle ich Model model und nach Aufruf model.addAttribute kann ich den "product" Namen in der jsp Datei verwenden, zum Beispiel product.getProductPrice. Aber in zweiten Methode mit dem gleichen Namen wie die erste, fügte ich Parameter "@ModelAttribute (" Produkt ") Produkt Produkt", aber warum ?? Wenn ich diese Anmerkung löschen wird, mein Programm nach wie vor als gleiche funktioniert, mir bitte erklären) Vielen Dank, sorry für mein Englisch, ich bin aus der Ukraine)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";
}
Es ist nicht klar, was Sie fragen. Im ersten Fall erstellen Sie das Produkt im Controller und fügen es in das Modell ein. Im zweiten Fall erhalten Sie die 'Product'-Informationen aus den Anforderungsinhalten. (Und um Himmels willen, programmieren Sie keine verrückte Dateimanipulation! Wenn Sie etwas so haben wollen, verwenden Sie eine Eigenschaft mit '@ Value', um sie zu spezifizieren.) – chrylis
Obwohl es scheint, dass es funktioniert Gleiches gilt für Realität. Besonders wenn Sie mit der Validierung beginnen oder mit '@ SessionAttributes' kombiniert werden, werden Sie seltsames Verhalten bemerken. –