我的应用程序模型中有一个父类及其子类 并有以下控制器方法:
@RequestMapping(method=RequestMethod.POST, value="/page")
public String postMethod(Model model, Parent obj, BindingResult result) {
// do something
}
但是我希望它能够处理由表单发布的子类的实例 我怎么能这样做?
答案 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。