Spring MVC +百里香叶:将变量添加到所有模板的上下文

wvyml7n5  于 2022-12-13  发布在  Spring
关注(0)|答案(6)|浏览(189)

我如何添加一个“全局”变量,如用户名,以便在我的模板上下文中使用?
目前,我在TemplateController中为每个ModelAndView对象显式地设置这些属性。

tyky79it

tyky79it1#

有几种方法可以做到这一点。
如果你想把一个变量添加到由一个控制器提供服务的所有视图中,你可以添加一个@ModelAttribute注解方法--参见参考文档。
请注意,您也可以使用相同的@ModelAttribute机制,一次寻址多个Controller。为此,您可以在一个用@ControllerAdvice注解的类中实现@ModelAttribute方法-参见参考文档。

w6lpcovy

w6lpcovy2#

@ControllerAdvice为我工作:

@ControllerAdvice(annotations = RestController.class)
public class AnnotationAdvice {

     @Autowired
     UserServiceImpl userService;

     @ModelAttribute("currentUser")
     public User getCurrentUser() {
         UserDetails userDetails = (UserDetails) 
         SecurityContextHolder.getContext()
               .getAuthentication().getPrincipal();

      return userService.findUserByEmail(userDetails.getUsername());
     }
  }
axr492tv

axr492tv3#

如果您只是想将application.properties中的内容添加到thymeleaf模板中,那么您可以使用Spring的SpEL

${@environment.getProperty('name.of.the.property')}
rhfm7lfc

rhfm7lfc4#

您可能希望查看@ModelAttribute. http://www.thymeleaf.org/doc/articles/springmvcaccessdata.html
Blockquote在Thymeleaf中,这些模型属性(或Thymeleaf术语中的上下文变量)可以通过以下语法访问:${attributeName},其中attributeName在本例中是消息。这是一个Spring EL表达式。

6tqwzwtp

6tqwzwtp5#

下面是一个关于Sping Boot 和Thymeleaf的示例。
首先,我们需要创建一个@ControllerAdvice

@ControllerAdvice
public class MvcAdvice {

    // adds a global value to every model
    @ModelAttribute("baseUrl")
    public String test() {
        return HttpUtil.getBaseUrl();
    }
}

现在,我们可以在模板中访问baseUrl

<span th:text=${baseUrl}></span>
kqlmhetl

kqlmhetl6#

希望根据Brian Clozel的回答给予代码示例:
ControllerAdvice

@ControllerAdvice(annotations = Controller.class)
public class GetPrincipalController {

    @ModelAttribute("principal")
    public Object getCurrentUser() {
        return SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    }
}

完成上述操作后,您将获得一个principal对象,然后您可以在应用程序中“全局”使用该对象中的所有内容,在任何Thyemleaf模板like this

<li><span th:text="${principal.getUsername()}"></span></li>
<li><span th:text="${principal.getAuthorities()}"></span></li>

相关问题