2015-05-08 2 views
11

Как добавить глобальную переменную, такую ​​как имя пользователя, которое будет использоваться вокруг контекста шаблона?Spring MVC + Thymeleaf: добавление переменной во все контексты шаблонов

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

ответ

8

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

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

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

+0

'@ ControllerAdvice' работал как шарм для меня. – demaniak

1

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

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

1

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

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

@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()); 
    } 
    } 
Смежные вопросы