1. 概要

このチュートリアルでは、Thymeleafで使用可能なさまざまなタイプの条件を見ていきます。

Thymeleafの簡単な紹介については、この記事を参照してください。

2. Mavenの依存関係

Springと一緒にThymeleafを使用するために必要なMavenの依存関係から始めましょう。

<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リリースでは、一致する thymeleaf-springX ライブラリを使用する必要があります。ここで、XはSpringバージョンを表します。 Spring 5は、Thymeleafによる3.0.8.RELEASE以降でサポートされていることにも注意してください。

必要な依存関係の最新バージョンは、ここにあります。

3. Thymeleaf条件付き

条件に応じてHTML要素内でテキストをレンダリングできる条件と、HTML要素自体のインスタンス化を制御する条件を区別する必要があります。

この記事全体で使用するTeacherモデルクラスを定義しましょう。

public class Teacher implements Serializable {
    private String gender;
    private boolean isActive;
    private List<String> courses = new ArrayList<>();
    private String additionalSkills;

3.1. エルビス演算子

エルビス演算子?:を使用すると、変数の現在の状態に応じて、HTML要素内のテキストをレンダリングできます。

変数がnullの場合、デフォルトの式を使用してデフォルトのテキストを提供できます。

<td th:text="${teacher.additionalSkills} ?: 'UNKNOWN'" />

上の例では、 Teacher.additionalSkills 変数が定義されている場合はその内容を表示し、そうでない場合は「UNKNOWN」というテキストを表示します。

ブール式に応じて、任意のテキストを表示することもできます。

<td th:text="${teacher.active} ? 'ACTIVE' : 'RETIRED'" />

前の例のように単純なブール変数をクエリできますが、文字列の比較と範囲のチェックも可能です。

次のコンパレータとそのテキスト表現がサポートされています >(gt)、> =(ge)、<(lt)、<=(le)、==(eq)および!=(ne)

3.2. もし–そうでない限り

th:ifおよびth:unless 属性を使用すると、指定された条件に応じてHTML要素をレンダリングできます。

<td>
    <span th:if="${teacher.gender == 'F'}">Female</span>
    <span th:unless="${teacher.gender == 'F'}">Male</span>
</td>

Teacher.gender変数の内容がF、と等しい場合、値が「Female」のspan要素がレンダリングされます。

それ以外の場合は、「Male」の要素がレンダリングされます。 このような設定は、ほとんどのプログラミング言語に存在するif-else句に相当します。

3.3. スイッチケース

式の結果が3つ以上ある場合は、 th:switch 属性とth:case 属性を使用して、HTML要素の条件付きレンダリングを行うことができます。

<td th:switch="${#lists.size(teacher.courses)}">
    <span th:case="'0'">NO COURSES YET!</span>
    <span th:case="'1'" th:text="${teacher.courses[0]}"></span>
    <div th:case="*">
        <div th:each="course:${teacher.courses}" th:text="${course}"/>
    </div>
</td>

Teacher.courses リストのサイズに応じて、デフォルトのテキスト、単一のコース、または利用可能なすべてのコースのいずれかが表示されます。 デフォルトオプションには、アスタリスク(*)が使用されます。

4. 結論

この短い記事では、さまざまなタイプのThymeleaf条件を調査し、さまざまなオプションを示すいくつかの簡略化された例を示しました。

例はGitHubプロジェクトにあります。