首页 > 解决方案 > 在不同控制器的视图之间共享modelAttribute

问题描述

在我当前的 Spring 项目中(使用 Thymeleaf),我将这两个控制器HomeController和一个通用控制器扩展到与模型层中的实体关联的所有控制器。

在中HomeController,我有这个 modelAttribute 方法:

@ModelAttribute("usuario")
public Usuario usuario() {
  return usuario.findBy("username", SecurityContextHolder.getContext().getAuthentication().getName());
}

这显然可以通过这个控制器中映射的视图来访问。有没有办法与另一个控制器中映射的视图共享这个 modelAttribute ?

我在很多地方都读过这个RedirectAttributes资源,但我猜它只适用于重定向视图(如modelAndView.setViewName("redirect:welcome");)?

标签: springmodel-view-controllermodelattribute

解决方案


将该方法移动到单独的类并将@ControllerAdvice注释添加到该类。这样,该类中的所有模型属性都将应用于应用程序中的所有控制器。

如果您想限制模型属性可用的控制器集,您可以在 @ControllerAdvice注释中指定仅应增强特定包中或具有特定注释或实现特定接口的控制器。


推荐阅读