Spring MVC + Thymeleaf:将变量添加到所有模板的上下文中
Posted
技术标签:
【中文标题】Spring MVC + Thymeleaf:将变量添加到所有模板的上下文中【英文标题】:Spring MVC + Thymeleaf: adding variable to all templates' context 【发布时间】:2015-07-19 05:39:49 【问题描述】:如何添加一个“全局”变量,例如用户名,以便在我的模板上下文中使用?
目前我正在为我的 TemplateController 中的每个 ModelAndView 对象显式设置这些。
【问题讨论】:
【参考方案1】:这是 Spring 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>
【讨论】:
【参考方案2】:@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());
【讨论】:
【参考方案3】:如果您只是想将 application.properties
中的某些内容添加到您的 thymeleaf
模板中,那么您可以使用 Spring 的 SpEL。
$@environment.getProperty('name.of.the.property')
【讨论】:
【参考方案4】:有几种方法可以做到这一点。
如果你想为单个控制器服务的所有视图添加一个变量,你可以添加一个 @ModelAttribute
注释方法 - see reference doc。
请注意,您也可以使用相同的@ModelAttribute
机制,一次寻址多个控制器。为此,您可以在使用 @ControllerAdvice
- see reference doc 注释的类中实现 @ModelAttribute
方法。
【讨论】:
【参考方案5】:你可能想看看@ModelAttribute。 http://www.thymeleaf.org/doc/articles/springmvcaccessdata.html
块引用 在 Thymeleaf 中,可以使用以下语法访问这些模型属性(或 Thymeleaf 术语中的上下文变量):$attributeName,在我们的例子中,attributeName 是消息。这是一个 Spring EL 表达式。
【讨论】:
以上是关于Spring MVC + Thymeleaf:将变量添加到所有模板的上下文中的主要内容,如果未能解决你的问题,请参考以下文章
Thymeleaf 和 Spring MVC 的表单参数为空