概要
- 久しぶりにThymeleafを真面目に触ってみたら結構忘れていたので、リハビリも兼ねての備忘
- 特に式ユーティリティは公式ドキュメントをみてもアウトプットのイメージが直感で分からないので、あくまで自分用にメモ
検証環境
- SpringBoot + Thymeleaf
- SpringBoot上でSpringMVCのビューテンプレートエンジンとして動かす
- spring-boot-starter-thymeleaf : 2.2.4.RELEASE
- thymeleaf-spring5 : 3.0.11.RELEASE
- thymeleaf-extras-java8time : 3.0.4.RELEASE
式ユーティリティオブジェクト
- 式の中で一般的なタスクを実行するのを助けてくれるもの
公式
-
https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#expression-utility-objects
-
[日本語版] https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf_ja.html
検証
サンプルController
HelloController.java
@Controller
public class HelloController {
@RequestMapping
public String exec(Model model) {
model.addAttribute("string", "Hello");
model.addAttribute("stringNull", null);
model.addAttribute("stringArray", new String[]{"Foo", "Bar", "Baz"});
model.addAttribute("stringList", Arrays.asList("Hoge", "Fuga", "Piyo"));
model.addAttribute("STRING", "HELLO");
model.addAttribute("number", 1000);
return "hello";
}
}
#strings
- Stringオブジェクトに対するユーティリティメソッド群
メソッド(書き方) | 結果 | メモ |
---|---|---|
${#strings.isEmpty(string)} | true |
|
${#strings.defaultString(stringNull, 'default')} | default |
|
${#strings.contains(string, 'el')} | true |
|
${#strings.containsIgnoreCase(string, 'EL')} | true |
|
${#strings.prepend(string, 'prefix:')} | prefix:Hello |
|
${#strings.append(string, ':suffix')} | Hello:suffix |
|
${#strings.toUpperCase(string)} | HELLO |
|
${#strings.toLowerCase(string)} | hello |
|
${#strings.arrayJoin(stringArray, ',')} | Foo,Bar,Baz |
|
${#strings.listJoin(stringList, ',')} | Hoge,Fuga,Piyo |
|
${#strings.length(string)} | 5 |
|
${#strings.abbreviate(string, 4)} | H... |
|
${#strings.equals(string, stringNull)} | false |
|
${#strings.equalsIgnoreCase(string, STRING)} | true |
|
#numbers
- 数値オブジェクトに対するユーティリティメソッド群
メソッド(書き方) | 結果 | メモ |
---|---|---|
${#numbers.formatInteger(number, 5)} | 01000 |
|
${#numbers.formatInteger(number, 3, 'COMMA')} | 1,000 |
|
#arrays
- 配列に対するユーティリティメソッド群
メソッド(書き方) | 結果 | メモ |
---|---|---|
${#arrays.length(stringArray)} | 3 |
|
${#arrays.isEmpty(stringArray)} | false |
|
#lists
- リストに対するユーティリティメソッド群
メソッド(書き方) | 結果 | メモ |
---|---|---|
${#arrays.length(stringList)} | 3 |
|
${#arrays.isEmpty(stringList)} | false |
|
#date, #calendars
- java.util.Date と java.util.Calendarオブジェクト用のユーティリティメソッド群
- 今後Java8で(少なくとも私が)実装する際に、DateとCalendarは使わないので省略
- なんのこっちゃという方は、「Java8の日時APIはとりあえずこれだけ覚えとけ」によくまとめられているので参照ください
#temporals
- 個人的に今回まとめておきたかったのはこれ
- LacalDateやLocalDataTimeを扱うことができるユーティリティメソッド群
-
thymeleaf-extras-java8time
に含まれている - spring-boot-starter-thymeleaf:2.Xからデフォルト含まれるようになった(1系なら個別で追加すれば利用可能)
メソッド(書き方) | 結果 | メモ |
---|---|---|
${#temporals.format(time, 'yyyy/MM/dd HH:mm:ss')} |
2020/02/08 12:34:56 |
|
${#temporals.year(date)} | 2020 |
|
${#temporals.month(date)} | 2 |
|
${#temporals.day(date)} | 8 |
|
${#temporals.dayOfWeekName(date)} | 土曜日 |
|
${#temporals.hour(time)} | 12 |
|
${#temporals.minute(time)} | 34 |
|
${#temporals.second(time)} | 56 |
|
- 他にも色々あるけど、詳細はjavadocを参照ください
https://github.com/thymeleaf/thymeleaf-extras-java8time
まとめ
- この手の処理をサーバサイド(Thymeleaf)で行うかは意見が分かれるとは思いますが、できることを把握する・自分の中の選択肢を増やすことは重要だと考えています
- 今回まとめたものは一部で、他にも便利なユーティリティ群があるので、ぜひ公式ドキュメントやjavadocを参照してみてください
- 気が向いたら記事をアップデートしようと思います