2011-09-14 58 views
0

我在我的应用程序模型中有一个父类和它的孩子。
并具有以下控制器方法:如何在spring-mvc中将子类传递给控制器​​?

@RequestMapping(method=RequestMethod.POST, value="/page") 
public String postMethod(Model model, Parent obj, BindingResult result) { 
    // do something 
} 

,但我希望它能够处理子类的实例,也被张贴的形式。
我该怎么做?

回答

1

您可以创建所需类型的对象作为隐含模型属性:

@ModelAttribute("parent") 
public Parent createChild(@RequestParam("type") String type) { 
    if ("foo".equals(type)) return new Foo(); 
    else if ("bar".equals(type)) return new Bar(); 
    else return null; 
} 

由于春节不记得传递给自动表单对象的类型,你需要自己动手,通过增加一个隐藏的表单字段,其值指定对象的类型(上例中的type字段)。

另一种选择是避免通过将其存储在会话中从头开始创建对象。它可以使用@SessionAttributes注释配置,请参阅15.3.2.9 Specifying attributes to store in a session with @SessionAttributes

+0

你也可以解释一下“type”参数的含义,请在我试图编写“@RequestParam(”type“)时输入 – tsds

+0

”字符串类型“服务器给我404错误(客户端发送的请求是语法上的不正确()),但我需要一些方法来区分发送的对象。该类型参数应该在我的表单中硬编码还是可以在春天自动传递? – tsds

+1

@tsds:已更新。 – axtavt

相关问题