ThymeleafでJava SE 8のDate and Time APIを使う方法
やりたいこと
Thymeleafのビューで、java.time.LocalDate
などJava SE 8で入った日時クラス(Date and Time API)を使いたい。
Date and Time APIについてはこちらをどうぞ。
Java日付時刻APIメモ(Hishidama's Java8 Date and Time API Memo)
(蓮沼さんの資料は何故か見つからなかった・・・)
Thymeleafの拡張機能を追加
Thymeleafには、Date and Time APIを利用するための拡張機能があります。
https://github.com/thymeleaf/thymeleaf-extras-java8time
本体に入っていないのは恐らく、Thymeleaf本体はJava SE 6でコンパイルされているからだと思われます。
thymeleaf/CONTRIBUTING.markdown at 3.0-master · thymeleaf/thymeleaf · GitHub
pom.xmlに依存性を追加します。
<dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-java8time</artifactId> <version>3.0.0.RELEASE</version> <scope>compile</scope> </dependency>
Dialect
の追加
TemplateEngine
をnewしている場所で、Java8TimeDialect
を追加します。
templateEngine = new TemplateEngine(); templateEngine.addDialect(new Java8TimeDialect());
ビューからの利用
こんなクラスがあって、
public class Employee { ... private java.time.LocalDate joinedDate; // getter/setter }
ThymeleafでjoinedDate
をフォーマットして表示するには、下記のようにします。
<tr th:object="${employee}"> ... <td th:text="*{#temporals.format(joinedDate, 'yyyy-MM-dd')}">2020-01-01</td>
簡単ですね!
その他の機能
こちらのREADMEに、一通りの機能が説明されています。