多年来,我一直在使用 @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 中有一个处理程序,以及一个“创建”方法,如果模型(或会话,如果使用 @SessionAttributes)中还没有一个,则给它一个。因此,当我的 someHandler() 方法运行时,FormBean 已经存在并填充,因为我的 createFormBean() 已经运行。
然而,我的同事声称,虽然这工作得很好,但我滥用 @ModelAttribute 的目的并非出于本意,即在创建 Command 对象时。在他对JavaDoc的解释中,您应该只使用 @ModelAttribute 来创建静态数据,例如用于填充下拉列表等的项目。
我知道这可以很好地创建和初始化我的 Command 对象,但是我是否将它用于它最初不打算用于的目的?我在这里违反了一些基本规则吗?