Spring MVC + Thymeleaf:将变量添加到所有模板的上下文
Spring MVC + Thymeleaf: adding variable to all templates' context
如何添加一个 "global" 变量,例如要在我的模板上下文中使用的用户名?
目前我正在为我的 TemplateController 中的每个 ModelAndView 对象明确设置这些。
您可能想看看@ModelAttribute。 http://www.thymeleaf.org/doc/articles/springmvcaccessdata.html
Blockquote
In Thymeleaf, these model attributes (or context variables in Thymeleaf jargon) can be accessed with the following syntax: ${attributeName}, where attributeName in our case is messages. This is a Spring EL expression.
有几种方法可以做到这一点。
如果要将变量添加到单个控制器提供的所有视图,可以添加 @ModelAttribute
注释方法 - see reference doc.
请注意,您也可以使用相同的 @ModelAttribute
机制,一次处理多个控制器。为此,您可以在用 @ControllerAdvice
- see reference doc.
注释的 class 中实现 @ModelAttribute
方法
如果您只是想将 application.properties
中的内容添加到 thymeleaf
模板中,那么您可以使用 Spring 的 SpEL。
${@environment.getProperty('name.of.the.property')}
@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());
}
}
这是 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>
如何添加一个 "global" 变量,例如要在我的模板上下文中使用的用户名?
目前我正在为我的 TemplateController 中的每个 ModelAndView 对象明确设置这些。
您可能想看看@ModelAttribute。 http://www.thymeleaf.org/doc/articles/springmvcaccessdata.html
Blockquote In Thymeleaf, these model attributes (or context variables in Thymeleaf jargon) can be accessed with the following syntax: ${attributeName}, where attributeName in our case is messages. This is a Spring EL expression.
有几种方法可以做到这一点。
如果要将变量添加到单个控制器提供的所有视图,可以添加 @ModelAttribute
注释方法 - see reference doc.
请注意,您也可以使用相同的 @ModelAttribute
机制,一次处理多个控制器。为此,您可以在用 @ControllerAdvice
- see reference doc.
@ModelAttribute
方法
如果您只是想将 application.properties
中的内容添加到 thymeleaf
模板中,那么您可以使用 Spring 的 SpEL。
${@environment.getProperty('name.of.the.property')}
@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());
}
}
这是 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>