31
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Thymeleaf] 式ユーティリティオブジェクト

Last updated at Posted at 2020-02-08

概要

  • 久しぶりに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

式ユーティリティオブジェクト

  • 式の中で一般的なタスクを実行するのを助けてくれるもの

公式

検証

サンプル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
  • 文字列が空(またはnull)かどうかをチェックする
    ${#strings.defaultString(stringNull, 'default')} default
    • 'isEmpty()'を実行する
      • false:その文字列を返す
      • true:指定したデフォルト文字列を返す
    ${#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...
    • 与えられたテキストが最大サイズnになるよう省略処理する
      もしテキストがそれよりも大きい場合は、切り取られて最後に"..."がつく
    • 最大サイズnは処理後の...を含むため、最小で3
    ${#strings.equals(string, stringNull)} false
    • NULLセーフの文字列比較をする
    ${#strings.equalsIgnoreCase(string, STRING)} true
    • NULLセーフかつ大文字小文字の違いを無視した文字列比較をする

    #numbers

    • 数値オブジェクトに対するユーティリティメソッド群
    メソッド(書き方) 結果 メモ
    ${#numbers.formatInteger(number, 5)} 01000
    • 整数の最小桁数を設定する
    • 最小桁数に満たない場合は0埋めする
    ${#numbers.formatInteger(number, 3, 'COMMA')} 1,000
    • 整数の最小桁数と千の位の区切り文字を設定する
    • 'POINT'、'COMMA'、'WHITESPACE'、'NONE'または'DEFAULT'

    #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
    • 日付をフォーマットする
    • LocalDateでも同様
    • 'yyyy/M/d'にすれば、2020/2/8になる
    • 'yyyy年MM月dd日 HH時mm分'とかもOK
    ${#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
    • 秒を取得する

    まとめ

    • この手の処理をサーバサイド(Thymeleaf)で行うかは意見が分かれるとは思いますが、できることを把握する・自分の中の選択肢を増やすことは重要だと考えています
    • 今回まとめたものは一部で、他にも便利なユーティリティ群があるので、ぜひ公式ドキュメントやjavadocを参照してみてください
    • 気が向いたら記事をアップデートしようと思います
    31
    35
    0

    Register as a new user and use Qiita more conveniently

    1. You get articles that match your needs
    2. You can efficiently read back useful information
    3. You can use dark theme
    What you can do with signing up
    31
    35

    Delete article

    Deleted articles cannot be recovered.

    Draft of this article would be also deleted.

    Are you sure you want to delete this article?