2016-02-15 72 views
0

我有一個預覽頁面,需要添加或編輯模型並顯示預覽。Spring將多個屬性綁定到相同的@ModelAttribute

@RequestMapping(value = "/preview", method = RequestMethod.POST) 
    public ModelAndView preview(@ModelAttribute("editForm") FormModel editFormModel) { 
     //action 
    } 

@RequestMapping(value = "/preview", method = RequestMethod.POST) 
    public ModelAndView preview(@ModelAttribute("addForm") FormModel addFormModel) { 
     //action 
    } 

我需要從添加表單頁面和編輯表單頁面調用預覽。我要傳遞的模型是相同的,但來自不同的形式。

(1)有沒有一種方法ModelAttribute支持這種多屬性名稱映射? (2)我如何考慮重新設計這個?考慮(a)在表單提交之前重命名錶單名稱/屬性以使用相同的屬性名稱。 (b)完全刪除ModelAttribute - 對於我來說這不是一種選擇,因爲我使用的是spring mvc表單綁定。

注意:我使用editForm/addForm作爲會話屬性。

+0

我可能是錯的,但我不認爲模型屬性作爲路由邏輯的一部分,所以Spring無法確定將兩個相同的映射中的哪一個映射到預覽POST。你需要從REST的角度來思考這個問題 - 其中一個應該是POST,另一個是PUT。獲得該權利將通知您的決定有關模型屬性... –

+0

@EngineerDollery,我同意路由邏輯部分。我們不應該(在我的情況下,不能)使用ModelAttribute來確定路由到哪個方法。我的意圖只是將具有不同屬性名稱的相同表單模型(類型)採集到相同的方法中。 –

回答

0

不是真正的解決方案,而是解決問題。

方法1:

@RequestMapping(value = "/preview", method = RequestMethod.PUT) 
public ModelAndView preview(@ModelAttribute("editForm") FormModel editFormModel) { 
    //action 
} 

@RequestMapping(value = "/preview", method = RequestMethod.POST) 
public ModelAndView preview(@ModelAttribute("addForm") FormModel addFormModel) { 
    //action 
} 

方法2:

@RequestMapping(value = "/editpreview", method = RequestMethod.PUT) 
public ModelAndView preview(@ModelAttribute("editForm") FormModel editFormModel) { 
    //action 
} 

@RequestMapping(value = "/addpreview", method = RequestMethod.POST) 
public ModelAndView preview(@ModelAttribute("addForm") FormModel addFormModel) { 
    //action 
} 
相關問題