java - www - Spring MVC+Thymeleaf: agregando variables al contexto de todas las plantillas
thymeleaf vs jsf (4)
¿Cómo puedo agregar una variable "global" como el nombre de usuario para usarla en todo el contexto de mi plantilla?
Actualmente los estoy configurando explícitamente para cada objeto ModelAndView en mi TemplateController.
Es posible que desee echar un vistazo a @ModelAttribute. http://www.thymeleaf.org/doc/articles/springmvcaccessdata.html
Blockquote En Thymeleaf, se puede acceder a estos atributos de modelo (o variables de contexto en la jerga de Thymeleaf) con la siguiente sintaxis: $ {attributeName}, donde attributeName en nuestro caso es mensajes. Esta es una expresión de Spring EL.
Si simplemente desea algo de su thymeleaf
application.properties
en su plantilla de thymeleaf
, entonces puede hacer uso de Spring''s SpEL .
${@environment.getProperty(''name.of.the.property'')}
Varias formas de hacer esto.
Si desea agregar una variable a todas las vistas servidas por un solo controlador, puede agregar un método anotado @ModelAttribute
; consulte el documento de referencia .
Tenga en cuenta que también puede, utilizando el mismo mecanismo @ModelAttribute
, direccionar varios Controladores a la vez. Para eso, puede implementar ese método @ModelAttribute
en una clase anotada con @ControllerAdvice
- vea el documento de referencia .
@ControllerAdvice
trabaja para mí:
@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());
}
}