2016-11-06 10 views
4

私はSpring MVCの注釈@ModelAttributeについていくつか質問があります。 "addProduct"という名前の最初のメソッドでは、モデルモデルを作成し、呼び出し後にmodel.addAttributeを使用します.jspファイルでproduct.getProductPriceなどの「product」名前を使用できます。 しかし、最初と同じ名前の2番目のメソッドでは、パラメータ "@ModelAttribute(" product ")Product product"を追加しましたが、なぜですか? Spring MVCの注釈@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"; 
} 
+0

あなたが何を求めているのかは不明です。最初のケースでは、コントローラーの中に 'Product'を作成し、それをモデルに入れます。 2番目のケースでは、リクエストの内容から 'Product'情報を取得しています。 (そして、天国のために、そのような狂気のようなファイル操作をハードコーディングしないでください!もしあなたが*そんなものを持っているなら、それを指定するために '@ Value'を持つプロパティを使用してください)。 – chrylis

+0

それと同じではありません。検証の使用を開始するか、@ 'と組み合わせる場合は特にSessionAttributes'あなたは奇妙な行動が表示されます。 –

答えて

2

)私はウクライナ出身、私の英語のため申し訳ありませんが、どうもありがとうございまし )私は私のプログラムは前と同じ動作しますが、この注釈を削除する場合は、私に説明してください目的@ModelAttributeは、/バインドPARAMです があなたの方法で@ModelAttribute("person") Person personを言う要求モデルオブジェクトのプロパティは、それが人にオブジェクト、名前、年齢からプロパティをバインドし、そこからオブジェクトを構築します。それはあなたの意見に何も渡されません、それは仕事が要求が提出された後に終了します。その行為の見解には反映されません。あなたが明示的にプロパティを持つオブジェクトを構築しているModel modelを持っているとは対照的に

は、その属性に追加しました。 が上記のこととは異なり、あなたの意見に引き継がれます

関連する問題