2014-09-26 89 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