SpringBoot × Thymeleaf のWeb開発で、テンプレート上で List の要素に値が含まれるかなどのチェックをしたいケースがある。
<div th:if="${#lists.contains(lists, element)}"> ...
的なやつ。
上の例の "lists" をテンプレート内で定義したかったけど、意外とうまく行かなかったのでメモしておく。
前提
まず、Thymeleaf にはリテラルが次の種類しかない。
- テキストリテラル
- 数値リテラル
- 真偽値リテラル
- null リテラル
Thymeleaf のみでは List を定義することはできないみたい。
SpEL の利用
"Spring Expression langage" 通称 SpEL で、Spring 版の EL式。
SpEL ではリテラルとして次のものなどが利用できる。
- strings
- dates
- numeric values (int, real, and hex)
- boolean
- null
- lists
- maps
- arrays
つまり List を定義できる。
List の定義は {'1', '2', '3'}
と書ける。
結論
<div th:if="${#lists.contains({'1', '2', '3'}, element)}"> ...
こう書ける。
スッキリ書けて良かった。
蛇足
実は JavaScript ライクに ['1', '2', '3']
と書こうとしたんだけど、これだと配列とかに使う arrays[0] ← これ
とぶつかるよね。
恥ずかしい。。。