如何使模型属性全局?
2022-09-03 09:55:42
我正在使用,并且我希望视图的所有页面都可以访问用户的属性(姓名,性别,年龄...到目前为止,我使用每个控制器中的方法将当前用户的属性传递给 .有没有办法只做一次,避免在每个代码中都有相同的代码?Spring MVC Framework
.jsp
addAttribute
Model(UI)
View
Controller
我正在使用,并且我希望视图的所有页面都可以访问用户的属性(姓名,性别,年龄...到目前为止,我使用每个控制器中的方法将当前用户的属性传递给 .有没有办法只做一次,避免在每个代码中都有相同的代码?Spring MVC Framework
.jsp
addAttribute
Model(UI)
View
Controller
你可以在一个新的 Controller 类上使用 Spring 的注释,如下所示:@ControllerAdvice
@ControllerAdvice
public class GlobalControllerAdvice {
@ModelAttribute("user")
public List<Exercice> populateUser() {
User user = /* Get your user from service or security context or elsewhere */;
return user;
}
}
该方法将在每个请求上执行,并且由于它具有注释,因此方法(对象)的结果将通过名称(在注释上声明)为每个请求放入模型中。populateUser
@ModelAttribute
User
user
@ModelAttribute
用户将在你的jsp中使用,因为这是给定的名称(例如:${user}
@ModelAttribute
@ModelAttribute("fooBar")
-> ${fooBar}
)
您可以将一些参数传递给注释,以指定此全局控制器建议使用哪些控制器。例如:@ControllerAdvice
@ControllerAdvice(assignableTypes={FooController.class,BarController.class})
或
@ControllerAdvice(basePackages={"foo.bar.web.admin","foo.bar.web.management"}))
如果它与 User 的属性有关,则可以将模型 Bean 作为可在每个视图上访问的属性绑定到会话。这只需要做一次。
另一种选择可能是实现一个HandlerInterceptor,并将模型公开给每个请求。