私はSpring2.5の注釈付きコントローラーを持っており、@ RequestMapping(method = RequestMethod.GET)で注釈が付けられたメソッドがあり、モデルを埋めるためにいくつかのロジックを実行します。
リクエストを実行する@RequestMapping(method = RequestMethod.POST)で注釈が付けられたメソッドもあります。このメソッドには、自分のフォームpojoを含む@ModelAttribute注釈付きパラメーターがあります。これを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....
}