Thymeleafのヘルパー関数を@Componentで実装する

エキサイト株式会社メディアプラットフォーム事業部エンジニアの佐々木です。テンプレートエンジンの関数のみだと足りないのでSpringBootの@Componentを使用して拡張します。

コード

現在時刻を返すだけの簡単なヘルパー関数を作ってみます。コードはJavaで書きます。SpringBootのDIコンテナは、@Componentがつけられたクラス名のlowerCamelで、DIコンテナに格納する暗黙のルールがあります。なので、@Componentの宣言時に命名もセットにすると視認性が高くなるかなと思います。

@Component("dateTimeComponent")
public class DateTimeComponent {

    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");

    public String now() {
        return LocalDateTime.now().format(dateTimeFormatter);
    }
}

ThymeleafのHTMLコードは下記のようになります。

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Title</title>
</head>

<body>
  <h2> 時刻表示: [[ ${@dateTimeComponent.now()} ]] </h2>
</body>
</html>

${@dateTimeComponent.now()} のように、@+Bean名を書くだけで、DIされたヘルパー関数が読み込めるようになります。application.ymlに紐づくデータも読み込みめますので、本番環境と開発環境で差があるもの(ex.URL、パス)などを十分吸収してくれるものになります。

まとめ

結構簡単な実装で、ヘルパー関数を作ることができます。他にもバリデーションの正規表現などをJavaScriptに渡したり、デバッグ情報の表示用だったりなど、汎用性も高く作ることが可能です。ぜひ使ってみてください。