如何在spring-mvc中将子类传递给控制器​​?

时间:2011-09-14 09:19:53

标签: java spring spring-mvc

我的应用程序模型中有一个父类及其子类 并有以下控制器方法:

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

但是我希望它能够处理由表单发布的子类的实例 我怎么能这样做?

1 个答案:

答案 0 :(得分: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;
}

由于Spring不记得自动传递给表单的对象的类型,因此您需要自己执行此操作,方法是添加一个隐藏的表单字段,其值指定对象的类型(示例中为type字段上文)。

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