ThemeleafからJavaのメソッドを呼び出したい!

プログラミング
スポンサーリンク

目的

Thymeleafでは、標準でいくつかのユーティリティ関数が用意されています。
${#dates.format()} とか、${#strings.isEmpty()} とかとか。

このユーティリティ機能のことを、式ユーティリティオブジェクト とか言うらしいです。
(初めて知った・・・( ゚ ρ ゚ )ボー

便利ではあるんですが、意外と痒いところに手が届かなかったりするんですよね。

というわけなので、今回はそのユーティリティ機能を独自に作成してみましょう!ってお話です。

標準機能

例としていくつか紹介しておきますが、今回はよく使いそうなやつを抜粋しました。
ほかにもいろいろな処理があるので、詳しくは調べてみてください。

#strings

  • ${#strings.isEmpty(string)}
    • 文字列がブランクorNullであるかを判定する
  • ${#strings.contains(string, ‘sample’)}
    • 文字列に特定の文字列が含まれているかを判定する
  • ${#strings.toUpperCase(string)}
    • 文字列を大文字に変換する

#numbers

  • ${#numbers.formatInteger(number, 3, ‘COMMA’)}
    • 数値を指定桁数でカンマ区切りに設定する
    • COMMAのほかにも、POINTやWHITESPACEなどが指定できる

#arrays、#lists

  • ${#arrays.length(stringArray)}
  • ${#lists.length(stringArray)}
    • 配列(リスト)の要素数を取得する
  • ${#arrays.isEmpty(stringArray)}
  • ${#lists.isEmpty(stringArray)}
    • 配列(リスト)が空であるかを判定する

#date

  • ${ #dates.format( dateObject, ‘yyyy/MM/dd’ ) }”
    • Date型をフォーマットする

#calendars

  • ${#calendars.format(#calendars.createNow(), ‘yyyy年MM月dd日 HH時mm分ss秒’)}
    • 現在の日時をフォーマットして出力する
  • ${#calendars.createNowForTimeZone(‘GMT+0900’)}
    • タイムゾーンを指定してCalendarオブジェクトを生成する

#temporals

LacalDateやLocalDataTimeを扱うことができるらしい。。。

基本的に、#datesや#calendarsと同じ

独自に作成するには?

Thymeleafからアクセスしたいクラスに対し、@componentアノテーションを指定する

@Component
public class CommonUtil {
	/**
   * 日付文字列を指定のフォーマットでDate型へ変換して返却する。
   * 変換できない場合はNULLを返却するため要注意
   */
	public Date getDate( String dateStr, String input ) {
		if( dateStr == null || "".equals(dateStr) ) return null;
		
		SimpleDateFormat f1 = new SimpleDateFormat( input );
		try {
			f1.setLenient(false);
			return f1.parse(dateStr);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}
}

Thymeleaf側では、@クラス名.メソッド名(引数) でアクセスする

${#dates.format( @commonUtil.getDate(dateStr, 'yyyyMMdd'), 'yyyy/MM/dd' )}"

上記の例では、日付文字列を独自ユーティリティを使用しDate型へ変換し、再度フォーマットを指定して出力しています。

なぜこんなことをしているかというと、データベースにはyyyyMMddのCHAR(8)で格納しており、
画面へ出力する際には、”/”(スラッシュ)区切りで出力したいため、
一度Date型へ変換することで正確な日付でフォーマットするようにしています。

あえてString→Stringのフォーマットを用意してもいいと思いますが、
せっかくDate型→Stringが標準であるので、そちらを極力使おうというコーディングですね。

まとめ

Thymeleafでは、独自に式ユーティリティオブジェクトが作成できる。
作り方は、

1.Javaクラスに@component アノテーションを指定

2.Thymeleaf側は、@クラス名.メソッド名(引数) でアクセスする

以上。(*・ω・)*_ _)ペコリ

コメント

タイトルとURLをコピーしました