web-dev-qa-db-ja.com

Spring MVC + Thymeleaf:すべてのテンプレートのコンテキストに変数を追加する

テンプレートコンテキスト全体で使用されるユーザー名などの「グローバル」変数を追加するにはどうすればよいですか?

現在、これらをTemplateControllerの各ModelAndViewオブジェクトに明示的に設定しています。

18
thevangelist

これを行ういくつかの方法。

単一のコントローラーによって提供されるすべてのビューに変数を追加する場合は、@ModelAttributeアノテーション付きメソッド- リファレンスドキュメントを参照 を追加できます。

同じ@ModelAttributeメカニズムを使用して、一度に複数のコントローラーをアドレス指定することもできることに注意してください。そのために、その@ModelAttributeメソッドを@ControllerAdvice -- リファレンスドキュメントを参照 でアノテーションが付けられたクラスに実装できます。

17
Brian Clozel

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

application.propertiesからthymeleafテンプレートに何かが必要な場合は、Springの SpELを利用できます。 -)

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

@ModelAttributeをご覧になることをお勧めします。 http://www.thymeleaf.org/doc/articles/springmvcaccessdata.html

Blockquote Thymeleafでは、これらのモデル属性(またはThymeleaf用語のコンテキスト変数)には、次の構文でアクセスできます:$ {attributeName}、ここで、attributeNameはメッセージです。これはSpringEL式です。

2
Shikha Gupta