私は@RequestMapping(method = RequestMethod.GET)でアノテートされたメソッドを持つSpring 2.5アノテートコントローラを持っています。@ModelAttributeアノテートされたパラメータのデータバインディング
リクエストを実行する@RequestMapping(method = RequestMethod.POST)という注釈付きのメソッドもあります。このメソッドには、@ MyodelAttributeアノテーション付きのパラメータがあり、これには自分自身のフォームpojoが含まれています。MyFormという名前にします。 @ModelAttrributeで注釈を付けられたMyFormの初期化メソッドもあります。これまでのところ、すべてが期待通りに機能します:POSTリクエストでは、フォームデータはMyFormにバインドされ、処理できます。
問題は、(GET)リクエストパラメータを渡してフォームをあらかじめ入力できるようにすることです。私はMyFormの@ModelAttributeメソッドを持っているので、私のモデルではMyFormインスタンスを取得しますが、私のGETメソッドのパラメータとして特に使用しない限り、そのインスタンスは生成されません。
なぜ私はこれを行う必要がありますか?別の方法でGET要求のフォームにデータバインドを強制することは可能ですか?パラメータを渡すだけですが、すでにモデルに入っているので、何もする必要はありません。その結果、使用されていないメソッドパラメータが醜くなります。
[編集:説明するためのいくつかのコード例]
GETリクエストのフォーム移入ないコントローラ:私はhandlePageメソッドのメソッドシグネチャを変更すると
@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
}
}
を、それがGETリクエストに読み込まれます... @ModelAttribute
と
@RequestMapping(method=RequestMethod.GET)
public void handlePage(Model model, @ModelAttribute("myForm") MyForm myForm) {
//Do some stuff to populate the model....
}
あなたが自分のフォームpojoを持っていると言うとき、あなたはちょうどいくつかのドメインオブジェクトを意味していますよね? (いくつかのカスタムスプリングフォームの実装とは対照的に)。あなたのビューは単なる標準JSPですか? –
うん、そうだよ。ちょうどいくつかのドメインオブジェクト。私の見解はJSPではありませんが、私はそれだけのことについての本を書くことができるので、ビューの実装の詳細(私自身ではありません)を惜しみません。 –