我在控制器中使用@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;

}

如果需要在绑定视图的表单值之前初始化模型属性,这将很有用。例如,您可以从数据库中查询对象(以使其在当前会话中可用)。

在其他情况下,我更喜欢使用这种方法:

@RequestMapping

public String someHandler(final Model model) {

FormBean formBean = new FormBean();

// Do some sort of initialization

model.addAttribute("formBean", formBean);

}

我认为更清楚了。但是我不认为您“在这里违反了一些基本原则”。

以上是 我在控制器中使用@ModelAttribute错误吗? 的全部内容, 来源链接: utcz.com/qa/407746.html

回到顶部