我有一個Spring 2.5註釋的控制器,其中我有一個用@RequestMapping(method = RequestMethod.GET)註解的方法,它執行一些邏輯來填充模型。@ModelAttribute註釋參數的數據綁定
我也有一個用@RequestMapping(method = RequestMethod.POST)註解的方法來執行請求。這個方法有一個@ModelAttribute註釋參數,它包含我自己的表單pojo,我們稱之爲MyForm。我也有一個MyForm的初始化方法,也用@ModelAttrribute註解。到目前爲止,所有的工作都如預期的那樣:在POST請求上,表單數據綁定到MyForm,我可以處理它。
問題是我希望能夠通過傳遞(GET)請求參數來預填充表單。由於我有MyForm的@ModelAttribute方法,我在我的模型中得到了一個MyForm實例,但它不會被填充,除非我專門將它用作GET方法的參數。
爲什麼我必須這樣做,是否有可能以不同的方式強制在我的表單上爲GET請求綁定數據?我現在只是傳入參數,但因爲它已經在模型中,我不必對它做任何事情,導致一個醜陋的未使用的方法參數。
[編輯:一些代碼的例子來說明]
不填充在GET請求的形式,所述控制器:
@Controller
public class MyController {
@ModelAttribute("myForm")
public MyForm createForm() {
return new MyForm();
}
@RequestMapping(method=RequestMethod.GET)
public void handlePage(Model model) {
//Do some stuff to populate the model....
}
@RequestMapping(method=RequestMethod.POST)
public void processForm(@ModelAttribute("myForm") MyForm myForm) {
//Process the form
}
}
當我改變handlePage方法的方法簽名,它被填充在一個GET請求......
@RequestMapping(method=RequestMethod.GET)
public void handlePage(Model model, @ModelAttribute("myForm") MyForm myForm) {
//Do some stuff to populate the model....
}
當你說你有自己的形式pojo時,你的意思是一些域對象,對吧? (而不是一些自定義的Spring表單實現)。您的視圖也只是一個標準的JSP? – 2009-06-01 23:30:09
是的,你說得對。只是一些域對象。我的觀點不是JSP,但是我會告訴你視圖實現的細節(不是我自己的),因爲我可以單獨編寫一本書... – 2009-06-02 12:19:05