1前書き


Thymeleaf

は、HTML、XML、JavaScript、CSSおよびプレーンテキストを処理および作成するためのJavaテンプレートエンジンです。 ThymeleafとSpringの紹介については、リンクを見てください:/thymeleaf-in-spring-mvc[この記事を書く]

これらの基本的な機能に加えて、Thymeleafは私達に私達が私達のアプリケーションで一般的なタスクを実行するのを助けるであろうユーティリティオブジェクトのセットを提供します。

この記事では、Thymeleaf 3.0の中心的な機能であるSpring MVCアプリケーションのExpression Utilityオブジェクトについて説明します。具体的には、処理日、カレンダー、文字列、オブジェクトなどのトピックを取り上げます。


2 Mavenの依存関係

まず、ThymeleafとSpringを統合するために必要な設定を見てみましょう。私たちの依存関係では

thymeleaf-spring

ライブラリが必要です。

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

Spring 4プロジェクトでは、

thymeleaf-spring5

の代わりに

thymeleaf-spring4

ライブラリを使用する必要があります。依存関係の最新版はhttps://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.thymeleaf%22%20AND%20a%3A%22thymeleaf-spring5%22[で見つけることができます。ここに]。


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

この記事の中心となる部分を見てみる前に、WebアプリケーションプロジェクトでThymeleaf 3.0を設定する方法を確認したい場合は、/spring-thymeleaf-3[チュートリアル]を参照してください。

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



  • #dates


    :

    java.util.Date

    オブジェクトのためのユーティリティメソッド



  • #カレンダー


    :

    #dates

    に似ており、

    java.util.Calendar

    に使用されます。

オブジェクト




#numbers ** :数値オブジェクトをフォーマットするためのユーティリティメソッド



  • #strings


    :

    String

    オブジェクト用のユーティリティメソッド



  • #オブジェクト


    :一般的なJavaのオブジェクトメソッド

    Object

    クラス



  • #bools


    :

    boolean

    評価のためのユーティリティメソッド



  • #配列


    :配列のためのユーティリティメソッド



  • #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>

この関数は2つの変数をパラメータとして取ります:

Date

とそのフォーマット

最後に、私たちが使用できるいくつかの似たような便利な関数があります。

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

最初に曜日の名前を受け取り、2番目に新しい

Date

オブジェクトを作成し、最後に00:00に設定された新しい

Date

を作成します。


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>

1行目では、最小の整数桁と正確な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番目の例では、最小値と最大値に加えて、stepの定義を提供しました(この例では値が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

は空ではないので、メソッドは

false.

を返します。2番目の

String



null

なので、

true

が返されます。最後に、

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. 集計

ここで議論したいが最後ではないが最低限の機能は

aggregates

です。それらは

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に実装されているExpression Utility Objectsの機能について説明しました。

このチュートリアルの完全な実装はhttps://github.com/eugenp/tutorials/tree/master/spring-thymeleaf[the GitHub project]にあります。

  • テスト方法?** 最初にブラウザでプレイしてから、既存のJUnitテストも確認することをお勧めします。

例はすべての利用可能な効用表現を網羅しているわけではないことに注意してください。あなたがすべてのタイプのユーティリティについて学びたいならば、http://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#appendix-b-expression-utility-objects[ここ]を見てください。