th:text="${@map.get(key)}"
この記述が『Thymeleaf 特有の書き方か?』というご質問ですが
Tutorial: Thymeleaf + Spring というドキュメントの2 The SpringStandard Dialect
より、関係する記述を以下に引用します。
Access any beans in your application context using SpringEL’s syntax: ${@myBean.doSomething()}
この引用にある通り${@map.get(key)}
という記述は、SpringEL(EL=Expression Language)を使った、thymeleafのspring拡張機能を使ったものです。
このSpringEL(SpEL式ともいう)を使うことでSpringのDIコンテナが管理しているBeanにThymeleafのテンプレートファイルからアクセスできます。
ということなので回答は、”thymeleafのspring拡張機能を使った書き方” ということになります(つまり純粋なthymeleafの書き方ではない)。
このspring拡張機能については、上記にあげたTutorial: Thymeleaf + Spring というドキュメントで確認できますのでご覧ください。
最後に、以下2点補足致します。
map
という名前でアクセスできる点について
<span th:text="${@map.get('key')}">
この書き方でSpring DIコンテナが管理しているBeanにアクセスできるのは
@Reasoceの部分はXMLから初期値が与えられています。
ということから、おそらく
java
1@Configuration
2public class SampleResource {
3
4 @Bean
5 public Map<String, String> map() {
6 Map<String, String> map = new HashMap<>();
7
8 // XMLのデータをmapへ詰める何等かの処理
9
10 return map;
11 }
12}
のような処理があるからだと思います。この処理によりMap型のオブジェクトがmap
という名前でDIコンテナに管理され、thymeleafのテンプレートファイルからSpEL式でアクセスできるということになります。
(※メソッド名がmap()
でない場合、@Bean("map")
か @Bean(name = "map")
となっているかもしれません)
- thymeleafのspring拡張機能について
プロジェクトの依存関係にspring-boot-starter-thymeleaf
という依存ライブラリを追加していると思います。
これが更にthymeleaf-spring4
(もしくはthymeleaf-spring5
)に依存していますが、これがspring拡張機能のライブラリです。
thymeleaf単体を依存関係に追加しただけでは、これらはプロジェクトの依存関係に含まれないのでSpEL式は使えないということになります。