我有一個類層次結構,其中一個類,比如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