我在控制器中使用@ModelAttribute错误吗?
多年来,我一直在使用@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;
}
在此示例中,我在Controller中有一个需要FormBean的处理程序,以及一个“创建”方法,如果在模型(或会话,如果使用@SessionAttributes)中尚未存在该方法,则可以为其提供一个。因此,当我的someHandler()方法运行时,FormBean已经存在并被填充,因为我的createFormBean()已经运行。
但是,我的同事声称,尽管这很好用,但我滥用@ModelAttribute的目的并非出于其原意,即在创建Command对象时。在他对JavaDoc的解释中,您仅应使用@ModelAttribute创建静态数据,例如用于填充下拉列表等的项。
我知道这可以很好地创建和初始化Command对象,但是我是否出于某个原本不打算的目的使用它?我在这里违反一些基本规则吗?
回答:
@ModelAttribute("formBean")public FormBean createFormBean() {
FormBean formBean = new FormBean();
// Do some sort of initialization
return formBean;
}
如果需要在绑定视图的表单值之前初始化模型属性,这将很有用。例如,您可以从数据库中查询对象(以使其在当前会话中可用)。
在其他情况下,我更喜欢使用这种方法:
@RequestMappingpublic String someHandler(final Model model) {
FormBean formBean = new FormBean();
// Do some sort of initialization
model.addAttribute("formBean", formBean);
}
我认为更清楚了。但是我不认为您“在这里违反了一些基本原则”。
以上是 我在控制器中使用@ModelAttribute错误吗? 的全部内容, 来源链接: utcz.com/qa/407746.html