我有一个类层次结构,其中一个类,比如Book
是更具体的项目的基类,比如ChildrensBook
。将不同的子类型绑定到Spring MVC控制器
我需要以JSP形式呈现这些项目,以便可以编辑它们的字段。 Book
和ChildrensBook
有很多共同之处,因此使用单个控制器和单个JSP表单似乎是合理的。实际上ChildrensBook
只是一个Book
带有一个额外字段,比如ageGroup
。 JSP仅在编辑ChildrensBook
编辑实例时才显示该字段的输入框我已经开始编写代码,但是当完成的表单发回MVC控制器时我遇到了问题。下面是处理表单的方法:
@RequestMapping(value="*", method = RequestMethod.POST)
public String onSubmit(@Valid @ModelAttribute("entity") BookCommand command, BindingResult result, RedirectAttributes redirectAttributes, ModelMap model)
{ /* code not shown */ }
正如你所看到的,我的形式结合到BookCommand
,但我需要为儿童读物的形式绑定到ChildrensBookCommand
对象。
在这种情况下什么是一个好的解决方案?专门为ChildrensBook
创建另一个表单/控制器会导致大量不需要的重复代码。 使用ChildrensBookCommand
而不是BookCommand
创建另一个处理程序方法失败,可能是因为MVC无法确定要使用哪一个。 将儿童书形式发布到不同的URL看起来很尴尬,因为我使用自动设置表单动作URL的Spring <form:form ...>
标签。
感谢您的任何建议。
谢谢,这工作。使用Spring表单标签,我使用了
,就像我的情况一样,它们在每个映射方法中都使用单独的命令对象(BookCommand,ChildrensBookCommand),因此有必要为每个命令指定一个验证器。如何做到这一点解释[这里](http://stackoverflow.com/questions/14533488/addiing-multiple-validators-using-initbinder) – Alex 2013-05-14 14:45:04