Spring MVC + Thymeleaf: добавление переменной во все контексты шаблонов

Как добавить глобальную переменную, такую ​​как имя пользователя, которое будет использоваться вокруг моего контекста шаблона?

В настоящее время я устанавливаю их явно для каждого объекта ModelAndView в моем TemplateController.

Ответ 1

Несколько способов сделать это.

Если вы хотите добавить переменную ко всем представлениям, обслуживаемым одним контроллером, вы можете добавить аннотированный метод @ModelAttribute - см. ссылку doc.

Обратите внимание, что вы также можете использовать тот же @ModelAttribute  механизм, адрес сразу нескольких контроллеров. Для этого вы можете реализовать этот метод @ModelAttribute в классе, аннотированном с помощью @ControllerAdvice - см. Справочный документ.

Ответ 2

Вам может понравиться просмотр @ModelAttribute. http://www.thymeleaf.org/doc/articles/springmvcaccessdata.html

Blockquote В Тимелеафе эти атрибуты модели (или контекстные переменные в терминологии Тимелеафа) могут быть доступны со следующим синтаксисом: ${attributeName}, где attributeName в нашем случае является сообщениями. Это выражение Spring EL.

Ответ 3

Если вы просто хотите что-то из своего application.properties в свой шаблон thymeleaf, то вы можете использовать Spring SpEL.

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

Ответ 4

@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());
     }
  }