我如何添加一个“全局”变量,如用户名,以便在我的模板上下文中使用?目前,我在TemplateController中为每个ModelAndView对象显式地设置这些属性。
tyky79it1#
有几种方法可以做到这一点。如果你想把一个变量添加到由一个控制器提供服务的所有视图中,你可以添加一个@ModelAttribute注解方法--参见参考文档。请注意,您也可以使用相同的@ModelAttribute机制,一次寻址多个Controller。为此,您可以在一个用@ControllerAdvice注解的类中实现@ModelAttribute方法-参见参考文档。
@ModelAttribute
@ControllerAdvice
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()); } }
axr492tv3#
如果您只是想将application.properties中的内容添加到thymeleaf模板中,那么您可以使用Spring的SpEL。
application.properties
thymeleaf
${@environment.getProperty('name.of.the.property')}
rhfm7lfc4#
您可能希望查看@ModelAttribute. http://www.thymeleaf.org/doc/articles/springmvcaccessdata.htmlBlockquote在Thymeleaf中,这些模型属性(或Thymeleaf术语中的上下文变量)可以通过以下语法访问:${attributeName},其中attributeName在本例中是消息。这是一个Spring EL表达式。
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:
baseUrl
<span th:text=${baseUrl}></span>
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>
6条答案
按热度按时间tyky79it1#
有几种方法可以做到这一点。
如果你想把一个变量添加到由一个控制器提供服务的所有视图中,你可以添加一个
@ModelAttribute
注解方法--参见参考文档。请注意,您也可以使用相同的
@ModelAttribute
机制,一次寻址多个Controller。为此,您可以在一个用@ControllerAdvice
注解的类中实现@ModelAttribute
方法-参见参考文档。w6lpcovy2#
@ControllerAdvice
为我工作:axr492tv3#
如果您只是想将
application.properties
中的内容添加到thymeleaf
模板中,那么您可以使用Spring的SpEL。rhfm7lfc4#
您可能希望查看@ModelAttribute. http://www.thymeleaf.org/doc/articles/springmvcaccessdata.html
Blockquote在Thymeleaf中,这些模型属性(或Thymeleaf术语中的上下文变量)可以通过以下语法访问:${attributeName},其中attributeName在本例中是消息。这是一个Spring EL表达式。
6tqwzwtp5#
下面是一个关于Sping Boot 和Thymeleaf的示例。
首先,我们需要创建一个
@ControllerAdvice
:现在,我们可以在模板中访问
baseUrl
:kqlmhetl6#
希望根据Brian Clozel的回答给予代码示例:
ControllerAdvice:
完成上述操作后,您将获得一个principal对象,然后您可以在应用程序中“全局”使用该对象中的所有内容,在任何Thyemleaf模板like this: