2014-09-26 146 views
1

我想填充使用模型屬性的對象。它從JSP返回到控制器null春天MVC不填充模型屬性

<form:form method="post" action="addProduct" modelAttribute="product"> 
    <table> 
     <tr> 
      <td>Product Name :</td> 
      <td><form:input path="productName"/></td> 
     </tr> 
     <tr> 
      <td>Parent Product Id:</td> 
      <td><form:input path="parentId"/></td> 
     </tr> 
     <tr> 
      <td>Category Id:</td> 
      <td><form:input path="categoryId"/></td> 
     </tr> 
     <tr> 
      <td colspan="2"><input type="submit" value="AddProduct"></td> 
     </tr> 
    </table> 
</form:form> 

@Autowired 
private ProductService productService; 

@RequestMapping(value = "addProduct", method = RequestMethod.GET) 
public ModelAndView productForm(@ModelAttribute("product") Product product){ 
    return new ModelAndView("addProduct")); 
} 

@RequestMapping(value = "addProduct", method = RequestMethod.POST) 
public ModelAndView insertProduct(@ModelAttribute("product") Product product){ 
    System.out.println(product.getProductName() + " : " + product.getParentId() + " : " + product.getCategoryId()); 
    productService.insert(product); 
    return new ModelAndView("success"); 
} 

在使用modelAttribute得到的值回控制器,它的到來爲null。我究竟做錯了什麼?

另外還有一件事我正在做同樣的事情在我的Catergory class,它工作得很好。

無法理解這裏發生了什麼問題。

回答

2

最後我找到了解決我的問題。

在我的pojo類中,我給了setter不同的名字,因此它無法運行。

例: 在我的JSP我給

<form:input path="productName"/> 

凡我路徑名稱爲「產品名稱」,並在我的POJO類,我給同名的變量,但我二傳手的名字是不同的。

因此,爲了設置屬性值,Spring會查找名爲set + attributeName()的setter。

凡在此上述情況下這將是set + productName()

而且我的錯誤是我的二傳手有名字setName()

希望這能幫助像我這樣的春季新手。 謝謝

1

它看起來並不像你實際上將模型添加到你的ModelAndView。

這將傳遞一個新的產品對象的形式:

@RequestMapping(value = "addProduct", method = RequestMethod.GET) 
public ModelAndView productForm(){ 
    return new ModelAndView("addProduct", "product", new Product()); 
} 
+0

嗨,我試過由u提供的解決方案,但它仍然不工作,沒有想法爲什麼它不工作,直到它在sysout行輸出null。但我在我的另一個班級做同樣的工作很好。 – FriGaTe 2014-09-28 13:28:39

+0

我假設你在提交之前在表單中輸入了數據?你的Product類有沒有定義的arg構造函數? – schn0573 2014-09-29 13:19:57

+0

嗨,我有我的產品類中定義的默認和參數構造仍然不工作... – FriGaTe 2014-10-06 15:56:49