1. 序章

Thymeleaf は、HTML、XML、JavaScript、CSS、およびプレーンテキストを処理および作成するためのJavaテンプレートエンジンです。 ThymeleafとSpringの紹介については、この記事をご覧ください。

これらの基本的な機能に加えて、Thymeleafは、アプリケーションで一般的なタスクを実行するのに役立つ一連のユーティリティオブジェクトを提供します。

この記事では、Thymeleaf 3.0のコア機能–SpringMVCアプリケーションの式ユーティリティオブジェクトについて説明します。 具体的には、日付、カレンダー、文字列、オブジェクトなどの処理のトピックについて説明します。

2. Mavenの依存関係

まず、ThymeleafをSpringと統合するために必要な構成を見てみましょう。 thymeleaf-spring ライブラリは、依存関係に必要です。

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
    <version>3.0.11.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>3.0.11.RELEASE</version>
</dependency>

Spring 4プロジェクトの場合、thymeleaf-spring5の代わりにthymeleaf-spring4ライブラリを使用する必要があることに注意してください。 依存関係の最新バージョンはここにあります。

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

この記事の中心的な焦点を見る前に、一歩下がってWebアプリプロジェクトでThymeleaf 3.0を構成する方法を確認したい場合は、このチュートリアルを参照してください。

現在の記事の目的のために、SpringコントローラーとHTMLファイルを作成しました。これから説明するすべての機能をテストします。 以下は、使用可能なヘルパーオブジェクトとその機能の完全なリストです。

  • #dates java.util.Dateオブジェクトのユーティリティメソッド
  • #calendars #dates に類似しており、java.util.Calendarオブジェクトに使用されます
  • #numbers :数値オブジェクトをフォーマットするためのユーティリティメソッド
  • #strings Stringオブジェクトのユーティリティメソッド
  • #objects :一般的なJava Objectクラスのユーティリティメソッド
  • #bools boolean評価のユーティリティメソッド
  • #arrays :配列のユーティリティメソッド
  • #lists :リストのユーティリティメソッド
  • #sets :セットのユーティリティメソッド
  • #maps :マップのユーティリティメソッド
  • #aggregates :配列またはコレクションに集計を作成するためのユーティリティメソッド
  • #messages :変数式内の外部化されたメッセージを取得するためのユーティリティメソッド

3.1. 日付オブジェクト

ここで説明する最初の関数は、java.util.Dateオブジェクトの処理です。 date 処理を担当する式ユーティリティオブジェクトは、#dates.functionName()。で始まります。最初に取り上げる関数は、 Date オブジェクトのフォーマットです(これはSpringモデルパラメータに追加されます)。

ISO8601形式を使用するとします。

<p th:text="${#dates.formatISO(date)}"></p>

date がバックエンド側でどのように設定されていても、この標準に従って表示する必要があります。 さらに、形式を具体的にしたい場合は、手動で指定できます。

<p th:text="${#dates.format(date, 'dd-MM-yyyy HH:mm')}"></p>

この関数は、パラメーターとしてDateとその形式の2つの変数を取ります。

最後に、使用できる同様に便利な関数をいくつか示します。

<p th:text="${#dates.dayOfWeekName(date)}"></p>
<p th:text="${#dates.createNow()}"></p>
<p th:text="${#dates.createToday()}"></p>

最初に曜日の名前を受け取り、2番目に新しい Date オブジェクトを作成し、最後に時刻を設定して新しいDateを作成します。 00:00まで。

3.2. カレンダーオブジェクト

カレンダーユーティリティは、 java.util.Calendar オブジェクトのインスタンスを使用していることを除いて、日付処理と非常によく似ています。

<p th:text="${#calendars.formatISO(calendar)}"></p>
<p th:text="${#calendars.format(calendar, 'dd-MM-yyyy HH:mm')}"></p>
<p th:text="${#calendars.dayOfWeekName(calendar)}"></p>

唯一の違いは、新しいCalendarインスタンスを作成する場合です。

<p th:text="${#calendars.createNow().getTime()}"></p>
<p th:text="${#calendars.createToday().getFirstDayOfWeek()}"></p>

要求されたデータを取得するために、任意のCalendarクラスメソッドを使用する場合があることに注意してください。

3.3. 数値処理

もう1つの非常に便利な機能は、数値処理です。 doubleタイプでランダムに作成されたnum変数に注目しましょう。

<p th:text="${#numbers.formatDecimal(num,2,3)}"></p>
<p th:text="${#numbers.formatDecimal(num,2,3,'COMMA')}"></p>

最初の行では、最小整数桁と正確な10進数を設定して10進数をフォーマットします。 2つ目では、整数と10進数に加えて、小数点を指定しました。 オプションは、 POINT COMMA WHITESPACE NONE 、または DEFAULT (ロケール別)です。

この段落で提示したいもう1つの機能があります。 これは、整数のシーケンスの作成です。

<p th:each="number: ${#numbers.sequence(0,2)}">
    <span th:text="${number}"></span>
</p>
<p th:each="number: ${#numbers.sequence(0,4,2)}">
    <span th:text="${number}"></span>
</p>

最初の例では、Thymeleafに0〜2のシーケンスを生成させましたが、2番目の例では、最小値と最大値に加えて、ステップの定義を提供しました(この例では、値は2ずつ変化します)。

間隔は両側で閉じていることに注意してください。

3.4. 文字列操作

これは、式ユーティリティオブジェクトの最も包括的な機能です。

空のオブジェクトまたはnull Stringオブジェクトをチェックするユーティリティから説明を開始できます。 多くの場合、開発者はThymeleafタグ内でJavaメソッドを使用してこれを実行しますが、これはnullオブジェクトにとって安全ではない可能性があります。

代わりに、これを行うことができます:

<p th:text="${#strings.isEmpty(string)}"></p>
<p th:text="${#strings.isEmpty(nullString)}"></p>
<p th:text="${#strings.defaultString(emptyString,'Empty String')}"></p>

最初空ではないため、メソッドは間違い。 二番目ヌル 、だから私たちは得るでしょう真実 。 最後に、 String が空の場合は、#strings.defaultString(…)メソッドを使用してデフォルト値を指定できます。

他にもたくさんの方法があります。 それらはすべて、文字列だけでなく、 Java.Collections。 たとえば、部分文字列関連の操作を使用するには、次のようにします。

<p th:text="${#strings.indexOf(name,frag)}"></p>
<p th:text="${#strings.substring(name,3,5)}"></p>
<p th:text="${#strings.substringAfter(name,prefix)}"></p>
<p th:text="${#strings.substringBefore(name,suffix)}"></p>
<p th:text="${#strings.replace(name,'las','ler')}"></p>

または、nullセーフな比較と連結を使用するには:

<p th:text="${#strings.equals(first, second)}"></p>
<p th:text="${#strings.equalsIgnoreCase(first, second)}"></p>
<p th:text="${#strings.concat(values...)}"></p>
<p th:text="${#strings.concatReplaceNulls(nullValue, values...)}"></p>

最後に、構文を常に同じに保つテキストスタイル関連の機能があります。

<p th:text="${#strings.abbreviate(string,5)} "></p>
<p th:text="${#strings.capitalizeWords(string)}"></p>

最初の方法では、省略されたテキストにより、最大サイズはnになります。 テキストが大きい場合は、クリップされて「…」で終了します。

2番目の方法では、単語を大文字にします。

3.5. 骨材

ここで説明したい最後の、しかし少なくとも重要ではない関数は、集計です。 これらはnull安全であり、配列またはその他のコレクションから平均または合計を計算するためのユーティリティを提供します。

<p th:text="${#aggregates.sum(array)}"></p>
<p th:text="${#aggregates.avg(array)}"></p>
<p th:text="${#aggregates.sum(set)}"></p>
<p th:text="${#aggregates.avg(set)}"></p>

4. 結論

この記事では、Thymeleafフレームワークバージョン3.0に実装されている式ユーティリティオブジェクトの機能について説明しました。

このチュートリアルの完全な実装は、GitHubプロジェクトにあります。

テスト方法は?最初にブラウザーで遊んでから、既存のJUnitテストも確認することをお勧めします。

例がすべての利用可能なユーティリティ式を網羅しているわけではないことに注意してください。 すべてのタイプのユーティリティについて知りたい場合は、こちらをご覧ください。