3

Spring 3.0.5 Web MVC ベースのアプリケーションに取り組んでいます。私たちのコードでは、次のようなことを頻繁に行います。

@ModelAttribute(ModelKeys.SOME_BEAN)
public SomeBean newSomeBean() {
  return new SomeBean();
}

これは必要ないと思います。しかし、実際にそうでなかったとしたら、どうしてこれほど多くのコード レビューをすり抜けることができたのだろうか? 私の理解では、コントローラーメソッドが新しい SomeBean を必要とする場合、そのメソッドのパラメーターに @ModelAttribute で注釈を付けるだけで十分でしょうか? 次に、Spring はデフォルトのコンストラクターを使用して、コントローラー メソッドを呼び出すために必要な Bean を新しくします。

@RequestMapping(method = RequestMethod.POST)
public String doIt(
  @ModelAttribute(ModelKeys.SOME_BEAN) final SomeBean bean,
  final BindingResult bindingResult)
{
  ...
}

ここで、Spring は SomeBean のインスタンスを新しく作成し、POST されたデータからそれにデータ バインドしようとしますよね? 最初のコード スニペットに示されているようなメソッドは必要ありませんか? これを確認するか、これについてのあなたの考えを教えてください。先に進んで、空の Bean を新たに作成する以外に何もしないこれらすべてのメソッドを削除した場合、リスクが発生しますか?

4

1 に答える 1

2

@ModelAttributeメソッドのアノテーションは、Bean 属性を HTTP 要求パラメーターにバインドしません。これは、メソッド パラメーターの同じ注釈との主な違いです。このようなアプローチは、辞書から取得したコンボボックスの値など、モデルのリクエスト パラメータに依存しない一部のデータを入力するのに役立ちます。これは、コントローラーに複数のハンドラー メソッドがある場合、たとえば、同じタイプのオブジェクトを表示/変更/削除し、それらすべてで同じモデル属性のセットが必要な場合に特に役立ちます。

于 2011-06-22T07:03:12.400 に答える