開発情報・ナレッジ

投稿者: SPIRERS ナレッジ向上チーム 2026年8月14日 (金)

【Thymeleafを使いこなそう】第2回 ログイン時ステータスでの分岐処理解説

Thymeleaf(タイムリーフ)は属性名th:~で指定された値を処理し様々なHTMLを生成することができます。
本記事ではソース設定を行う際、Thymeleafでログイン時のステータスによるコンテンツのだし分けについて解説いたします。
Thymeleafの記法や動作についてはSPIRAL ver.2 サポートサイト Thymeleaf記法をご参照ください。
また、Thymeleaf関連記事をまとめた Thymeleaf特集 も是非ご覧ください。
関連記事はこちら

注意点

siteClient[xx]では、認証レコード値を挿入することが可能です。
xx部分には、認証DBの表示したいフィールドIDを入力ください。
参照フィールドを引用して使うには、参照先DBがレコード公開範囲設定済である必要があります。
認証レコード値の参照先DBレコード値を使用する場合には、siteClient[xx][yy]となります。
xx部分は、認証DBの参照フィールドのレコードID、yy部分には、参照先レコードの表示したいフィールドIDを入力ください。
また、以下のフィールドは使用できませんのでご注意ください。
日時
ユーザフィールド
参照フィールドのファイル
参照フィールドのパスワード
参照フィールドの参照フィールド
複数レコード参照の参照フィールドのテキストエリア
複数レコード参照の参照フィールドのマルチセレクト

条件式

Thymeleafで条件式を記載する場合には、「>」「<」などは使用できません。
そのため、下記に置き換えて使用する必要があります。
== eq
!= ne
> gt
>= ge
< lt
<= le
&& and
|| or

テキストフィールド

テキストフィールドの比較の際には、認証レコード値を文字列に変換してから比較する必要があります。
文字列変換には「#strings.toString()」にて可能です。
以下の例では、テキストフィールドの認証値が「value」の場合に
「テキストフィールドの値はvalueです」と表示するものとなります。
テキストフィールドの比較「eq」
<!-- Thymeleafのコード -->
<!-- 認証値がテキストフィールドの場合 -->
<span th:if="${#strings.toString(siteClient.record[xx]) eq 'value'}">テキストフィールドの値はvalueです</span>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドがテキストフィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and #strings.toString(siteClient.record[xx][yy]) eq 'value'}">テキストフィールドの値はvalueです</span>

セレクト

セレクトフィールドの比較の際には、セレクト項目のラベルIDもしくはラベル値を用いて比較可能です。
以下の例では、セレクトフィールドの認証値が「1,ラベル1」での場合に
「セレクトフィールドの値は「1,ラベル1」です」と表示するものとなります。
セレクトフィールドの比較「eq」
▼ラベルIDでの比較
<!-- Thymeleafのコード -->
<!-- 認証値がセレクトの場合 -->
<span th:if="${siteClient.record[xx]?.id eq 1}">セレクトフィールドの値は「1,ラベル1」です</span>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドがセレクトフィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy]?.id eq 1}">セレクトフィールドの値は「1,ラベル1」です</span>
▼ラベル値での比較
<!-- Thymeleafのコード -->
<!-- 認証値がセレクトフィールドの場合 -->
<span th:if="${siteClient.record[xx]?.label eq 'ラベル1'}">セレクトフィールドの値は「1,ラベル1」です</span>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドがセレクトフィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy]?.label eq 'ラベル1'}">セレクトフィールドの値は「1,ラベル1」です</span>

マルチセレクト

マルチセレクトフィールドの比較の際には、認証レコード値がListのため、
形式に変換してから#lists.containsにて判断します。
以下の例では、マルチセレクトフィールドの認証値が「1,ラベル1」を含むの場合に
「マルチセレクトフィールドの値は「1,ラベル1」が含まれます」を表示するものとなります。
※マルチセレクトフィールドに値が存在しない場合には、形式変換の際にエラーとなるため
 「th:if」にて値の存在有無をチェックする必要があります。
マルチセレクトフィールドの比較「含まれる」
▼ラベルIDでの比較
<!-- Thymeleafのコード -->
<!-- 認証値がマルチセレクトフィールドの場合 -->
<th:block th:if="${siteClient.record[xx] != null}" th:with="ids=${siteClient.record[xx].![id]}">
  <span th:if="${#lists.contains(ids, 1)}">
    マルチセレクトフィールドの値は「1,ラベル1」が含まれます
  </span>
</th:block>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドがマルチセレクトフィールドの場合 -->
<th:block th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null}" th:with="ids=${siteClient.record[xx][yy].![id]}">
    <span th:if="${#lists.contains(ids, 1)}">
        マルチセレクトフィールドの値は「1,ラベル1」が含まれます
    </span>
</th:block>
▼ラベル値での比較
<!-- Thymeleafのコード -->
<!-- 認証値がマルチセレクトフィールドの場合 -->
<th:block th:if="${siteClient.record[xx] != null}" th:with="labels=${siteClient.record[xx].![label]}">
    <span th:if="${#lists.contains(labels, 'ラベル1')}">
      マルチセレクトフィールドの値は「1,ラベル1」が含まれます
    </span>
</th:block>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドがマルチセレクトフィールドの場合 -->
<th:block th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null}" th:with="labels=${siteClient.record[xx][yy].![label]}">
    <span th:if="${#lists.contains(labels, 'ラベル1')}">
        マルチセレクトフィールドの値は「1,ラベル1」が含まれます
    </span>
</th:block>
また、イコールにしたい場合には、下記となります。
マルチセレクトフィールドの比較「eq」
▼イコールにしたい場合:ラベルIDでの比較
<!-- Thymeleafのコード -->
<!-- 認証値がマルチセレクトフィールドの場合 -->
<th:block th:if="${siteClient.record[xx] != null}" th:with="ids=${siteClient.record[xx].![id]}">
    <span th:if="${ids == {1,2}}">
      「1,ラベル1」「2,ラベル2」のみ
    </span>
</th:block>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドがマルチセレクトフィールドの場合 -->
<th:block th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null}" th:with="ids=${siteClient.record[xx][yy].![id]}">
    <span th:if="${ids == {1,2}}">
      「1,ラベル1」「2,ラベル2」のみ
    </span>
</th:block>
▼イコールにしたい場合:ラベル値での比較
<!-- Thymeleafのコード -->
<!-- 認証値がマルチセレクトフィールドの場合 -->
<th:block th:if="${siteClient.record[xx] != null}" th:with="labels=${siteClient.record[xx].![label]}">
    <span th:if="${labels == {'ラベル1','ラベル2'}}">
      「1,ラベル1」「2,ラベル2」のみ
    </span>
</th:block>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドがマルチセレクトフィールドの場合 -->
<th:block th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null}" th:with="labels=${siteClient.record[xx][yy].![label]}">
    <span th:if="${labels == {'ラベル1','ラベル2'}}">
      「1,ラベル1」「2,ラベル2」のみ
    </span>
</th:block>

日付・時刻

日付・時刻の比較の際には、現時点の時刻と比較することが多いです。
例では、現時点の日付と比較するため、PHPにて現在日時を取得し、Thymeleafに引き渡す処理を行います。
お試しいただく際には、ページのPHPに下記をご記載ください。
▼PHPのコード
<?php
$SPIRAL->setTHValue("today",date("Y-m-d"));
$SPIRAL->setTHValue("nowTime",date("H:m:s"));
ページPHPで記載した内容をThymeleafで使用するには、PHPの値を受け取る必要があります。
Thymeleafで値を受け取り、表示する方法は下記となります。
▼Thymeleafのコード
<!-- Thymeleafのコード -->
<span th:text="${cp.result.value['today']}"></span>
<span th:text="${cp.result.value['nowTime']}"></span>
現在の日付を認証値の日付と比較する際には、下記となります。
日付フィールドの比較「gt,eq,lt」
<!-- Thymeleafのコード -->
<!-- 認証値が日付フィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and cp.result.value['today'] gt siteClient.record[xx]?.format('yyyy-MM-dd')}">現在日は認証値の日付より前の日です。</span>
<span th:if="${siteClient.record[xx] != null and cp.result.value['today'] eq siteClient.record[xx]?.format('yyyy-MM-dd')}">現在日は認証値の日付と同じです。</span>
<span th:if="${siteClient.record[xx] != null and cp.result.value['today'] lt siteClient.record[xx]?.format('yyyy-MM-dd')}">現在日は認証値の日付より後の日です。</span>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドが認証値が日付フィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null and cp.result.value['today'] gt siteClient.record[xx][yy]?.format('yyyy-MM-dd')}">現在日は認証値の日付より前の日です。</span>
<span th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null and cp.result.value['today'] eq siteClient.record[xx][yy]?.format('yyyy-MM-dd')}">現在日は認証値の日付と同じです。</span>
<span th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null and cp.result.value['today'] lt siteClient.record[xx][yy]?.format('yyyy-MM-dd')}">現在日は認証値の日付より後の日です。</span>
現在の時刻を認証値の時刻と比較する際には、下記となります。
時刻フィールドの比較「gt,eq,lt」
<!-- Thymeleafのコード -->
<!-- 認証値が時刻フィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and cp.result.value['nowTime'] gt siteClient.record[xx]?.format('HH:mm:ss')}">現在時刻は認証値の時刻とより小さいです。</span>
<span th:if="${siteClient.record[xx] != null and cp.result.value['nowTime'] eq siteClient.record[xx]?.format('HH:mm:ss')}">現在時刻は認証値の時刻と同じです。</span>
<span th:if="${siteClient.record[xx] != null and cp.result.value['nowTime'] lt siteClient.record[xx]?.format('HH:mm:ss')}">現在時刻は認証値の時刻とより大きいです。</span>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドが認証値が時刻フィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null and cp.result.value['nowTime'] gt siteClient.record[xx][yy]?.format('HH:mm:ss')}">現在時刻は認証値の時刻とより小さいです。</span>
<span th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null and cp.result.value['nowTime'] eq siteClient.record[xx][yy]?.format('HH:mm:ss')}">現在時刻は認証値の時刻と同じです。</span>
<span th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null and cp.result.value['nowTime'] lt siteClient.record[xx][yy]?.format('HH:mm:ss')}">現在時刻は認証値の時刻とより大きいです。</span>
また、日付と時刻を併せて比較ことで、認証値の日付・時刻以降に表示を切り替えるなども可能となります。
日時・時刻フィールドの比較「現在日が設定値と一致 かつ 現在時刻が設定値より後 の場合に表示」
<!-- Thymeleafのコード -->
<!-- 認証値が日付・時刻フィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and siteClient.record[XX] != null and cp.result.value['today'] eq siteClient.record[xx].format('yyyy-MM-dd') and cp.result.value['nowTime'] le siteClient.record[XX].format('HH:mm:ss')}">
    現在日が設定値と一致 かつ 現在時刻が設定値より後 の場合に表示
</span>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドが認証値が日時・時刻フィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null and siteClient.record[xx][YY] != null and cp.result.value['today'] eq siteClient.record[xx][yy].format('yyyy-MM-dd') and cp.result.value['nowTime'] le siteClient.record[xx][YY].format('HH:mm:ss')}">
    現在日が設定値と一致 かつ 現在時刻が設定値より後 の場合に表示
</span>
日時・時刻フィールドの比較「特定の日時より後の場合に表示」
<!-- Thymeleafのコード -->
<!-- 認証値が日付・時刻フィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and siteClient.record[XX] != null and cp.result.value['today'] lt siteClient.record[xx].format('yyyy-MM-dd') or (cp.result.value['today'] eq siteClient.record[xx].format('yyyy-MM-dd') and cp.result.value['nowTime'] le siteClient.record[XX].format('HH:mm:ss'))}">
    特定の日時より後の場合に表示
</span>
<!-- Thymeleafのコード -->
<!-- 認証値が参照フィールド、参照先フィールドが認証値が日時・時刻フィールドの場合 -->
<span th:if="${siteClient.record[xx] != null and siteClient.record[xx][yy] != null and siteClient.record[xx][YY] != null and (cp.result.value['today'] lt siteClient.record[xx][yy].format('yyyy-MM-dd') or (cp.result.value['today'] eq siteClient.record[xx][yy].format('yyyy-MM-dd') and cp.result.value['nowTime'] le siteClient.record[xx][YY].format('HH:mm:ss')))}">
    特定の日時より後の場合に表示
</span>
関連記事はこちら

解決しない場合はこちら コンテンツに関しての
要望はこちら