何年もの間、 @ModelAttribute を使用して、次のようにコマンド オブジェクトを作成および初期化してきました。
@RequestMapping()
public String someHandler(@ModelAttribute("formBean") FormBean formBean) {
// Do something
}
@ModelAttribute("formBean")
public FormBean createFormBean() {
FormBean formBean = new FormBean();
// Do some sort of initialization
return formBean;
}
この例では、FormBean を必要とする Controller にハンドラーがあり、Model (または @SessionAttributes を使用している場合はセッション) にまだない場合はそれを与える "create" メソッドがあります。そのため、someHandler() メソッドが実行されると、フォーム Bean は既に存在し、作成されています。これは、createFormBean() が既に実行されているためです。
しかし、私の同僚は、これは問題なく機能しますが、@ModelAttribute を意図しない目的、つまり Command オブジェクトの作成に悪用していると主張しています。JavaDocからの彼の解釈では、 @ModelAttribute を使用して、ドロップダウン リストの入力に使用される項目などの静的データのみを作成する必要があります。
これが Command オブジェクトの作成と初期化に非常にうまく機能することはわかっていますが、本来意図していなかった目的でこれを使用しているのでしょうか? ここで基本的なルールを破っていますか?