18.7 @ModelAttribute
前面谈到Spring MVC在每次调用请求处理方法时,都会创建Model类型的一个实例。若打算使用该实例,则可以在方法中添加一个Model类型的参数。事实上,还可以使用在方法中添加ModelAttribute注解类型来访问Model实例。该注解类型也是org.springframework. web.bind.annotation包的成员。
可以用@ModelAttribute来注解方法参数或方法。带@ModelAttribute注解的方法会将其输入的或创建的参数对象添加到Model对象中(若方法中没有显式地添加)。例如,Spring MVC将在每次调用submitOrder方法时创建一个Order实例:
1 | ( |
输入或创建的Order实例将用newOrder键值添加到Model对象中。如果未定义键值名,则将使用该对象类型的名称。例如,每次调用如下方法,会使用键值order将Order实例添加到Model对象中:
1 | public String submitOrder( |
@ModelAttribute的第二个用途是标注一个非请求的处理方法。被@ModelAttribute注解的方法会在每次调用该控制器类的请求处理方法时被调用。这意味着,如果一个控制器类有两个请求处理方法,以及一个有@ModelAttribute注解的方法,该方法的调用就会比每个处理请求方法更频繁。Spring MVC会在调用请求处理方法之前调用带@ModelAttribute注解的方法。带@ModelAttribute注解的方法可以返回一个对象或一个void类型。如果返回一个对象,则返回对象会自动添加到Model中:
1 |
|
若方法返回void,则还必须添加一个Model类型的参数,并自行将实例添加到Model中。如下面的例子所示:
1 |
|
原文链接: 18.7 @ModelAttribute