基本的な値の表示
モデル属性などの値をHTMLコンテンツや属性に表示するための基本的な方法です。
| 属性 | 説明 | 使用例 | 
|---|---|---|
th:text | 要素のボディを指定されたテキスト値で置き換えます。特殊文字はエスケープされます。安全です。 |  | 
th:utext | 要素のボディを指定されたHTMLコンテンツで置き換えます。エスケープされません (Unescaped Text)。XSS脆弱性に注意が必要です。 |  | 
インライン [[...]] | th:text と同様の効果を持ちます。テキストノード内に直接記述できます。 |  | 
インライン [(...)] | th:utext と同様の効果を持ちます。テキストノード内に直接記述できます。エスケープされません。 |  | 
条件分岐
条件に基づいてHTML要素のレンダリングを制御します。
| 属性 | 説明 | 使用例 | 
|---|---|---|
th:if | 条件式が true の場合にのみ要素をレンダリングします。 |  | 
th:unless | 条件式が false の場合にのみ要素をレンダリングします。th:if の逆です。 |  | 
th:switch / th:case | 複数の条件分岐を記述します。th:switch で評価する値を指定し、th:case で各条件を指定します。th:case="*" はデフォルトケース(どのケースにも一致しない場合)です。 |  | 
繰り返し処理
コレクション(リスト、セット、配列など)やマップの要素を反復処理してHTML要素を生成します。
| 属性 | 説明 | 使用例 | 
|---|---|---|
th:each | 指定されたコレクションの各要素に対して、その要素自身をレンダリングします。 |  | 
| 状態変数 (Iteration Status) | th:each 内で反復処理の状態(インデックス、カウント、サイズ、奇数/偶数など)を取得できる変数。デフォルト名は iterStat ですが、th:each="item, itemStat : ${items}" のように指定できます。 | 利用可能なプロパティ:   | 
| マップの繰り返し | マップを繰り返す場合、キーと値の両方にアクセスできます。 |  | 
属性値の設定
HTML要素の属性値を動的に設定します。
| 属性 | 説明 | 使用例 | 
|---|---|---|
th:href | <a> タグなどの href 属性の値を設定します。URL式 @{...} と共に使うことが多いです。 |  | 
th:src | <img> や <script> タグなどの src 属性の値を設定します。 |  | 
th:value | <input> タグなどの value 属性の値を設定します。 |  | 
th:classappend | 既存の class 属性値に、指定したクラスを追加します。 |  | 
th:styleappend | 既存の style 属性値に、指定したスタイルを追加します。 |  | 
th:attrappend / th:attrprepend | 既存の属性値の前(prepend)または後(append)に値を追加します。区切り文字を指定することも可能です。 |  | 
th:attr | 任意の属性とその値を設定します。複数の属性を一度に設定することも可能です。 |  | 
th:checked, th:selected, th:disabled, etc. | 真偽値属性を設定します。式が true の場合、属性が追加されます(例: checked="checked")。false の場合、属性は追加されません。 |  | 
th:data-* | HTML5の data-* 属性を設定するためのシンタックスシュガーです。 | これは以下と同等です:  | 
フォームの扱い
フォームの表示、入力値のバインディング、エラー表示などをサポートします。
| 属性 | 説明 | 使用例 | 
|---|---|---|
th:object | フォーム全体でバインドするオブジェクト(フォームバッキングビーン)を指定します。子要素では選択変数式 *{...} を使用してプロパティにアクセスできます。 |  | 
th:field | フォーム要素(input, select, textarea)と、th:object で指定されたオブジェクトのプロパティをバインドします。id, name, value (または checked/selected) 属性を自動的に設定します。選択変数式 *{...} を使用します。 |  | 
th:errors | 指定したフィールド(または全体 "*")に関連するバリデーションエラーメッセージを表示します。通常、エラーメッセージを含む要素を生成します。 |  | 
th:errorclass | 関連するフィールドにエラーがある場合に、指定したCSSクラスを要素に追加します。 |  | 
#fields ユーティリティオブジェクトは、フォームのエラー処理に役立ちます (例: #fields.hasErrors(...), #fields.errors(...), #fields.hasGlobalErrors(), #fields.globalErrors())。
テンプレートレイアウト
テンプレートの断片(フラグメント)を定義し、他のテンプレートから再利用することで、共通レイアウトなどを実現します。
| 属性 / 式 | 説明 | 使用例 | 
|---|---|---|
th:fragment | テンプレートの一部をフラグメントとして定義します。名前を付けて他の場所から参照できるようにします。 |  | 
th:insert | 指定したフラグメントを、この属性が指定された要素の子要素として挿入します。元の要素は保持されます。 |  | 
th:replace | 指定したフラグメントで、この属性が指定された要素自体を置き換えます。元の要素は削除されます。 |  | 
th:include (非推奨) | 指定したフラグメントの内容を、この属性が指定された要素の子要素として挿入します。フラグメントのルート要素は含まれません。th:insert や th:replace の使用が推奨されます。 |  | 
フラグメント式 ~{...} | フラグメントを指定するための式です。~{テンプレート名 :: フラグメント名} または ~{テンプレート名 :: #idセレクタ} または ~{:: フラグメント名} (同じテンプレート内) の形式で使用します。 |  | 
| パラメータ付きフラグメント | フラグメント定義側で引数を定義し、呼び出し側で値を渡すことができます。 |  | 
th:remove | 要素とその子要素をテンプレートから削除します。値によって削除するかどうかを制御できます (all, body, tag, all-but-first, none)。条件式と組み合わせて使うこともあります。 |  | 
式の種類
Thymeleaf で使用できる主な式を紹介します。
| 式 | 説明 | 使用例 | 
|---|---|---|
変数式 ${...} | モデル属性、リクエストパラメータ、セッション属性、アプリケーション属性などにアクセスします。OGNL (Object-Graph Navigation Language) または Spring Expression Language (SpEL) に基づいて評価されます。 |  | 
選択変数式 *{...} | th:object で選択されたオブジェクトのプロパティにアクセスします。変数式 ${...} よりも短く記述できます。 |  | 
メッセージ式 #{...} | 外部化されたメッセージ(国際化対応など)にアクセスします。messages.properties などのファイルから値を取得します。 |  | 
リンクURL式 @{...} | アプリケーションのコンテキストパスを考慮したURLを生成します。パス変数やリクエストパラメータを含めることができます。 | サーバー相対URL (  | 
フラグメント式 ~{...} | テンプレートフラグメントを指定します。「テンプレートレイアウト」セクションで詳述。 |  | 
リテラルと演算子
式の中で使用できるリテラル(定数値)と演算子です。
リテラル
| 種類 | 説明 | 例 | 
|---|---|---|
| テキストリテラル | シングルクォート '...' で囲みます。 | 'Hello World', 'ユーザー名' | 
| 数値リテラル | 通常の数値です。 | 123, 3.14 | 
| 真偽値リテラル | true または false です。 | th:if="${user.active == true}" | 
| Nullリテラル | null です。 | th:if="${user.email == null}" | 
| リテラルトークン | シングルクォートなしで書ける特別なテキストリテラル。英数字、[]、.、-、_ のみで構成される場合。 | th:classappend=${isAdmin}? main : secondary (main と secondary がリテラルトークン) | 
演算子
| 種類 | 演算子 (例) | 説明 | 
|---|---|---|
| 算術演算子 | +, -, *, /, % | 加算、減算、乗算、除算、剰余 | 
| 比較演算子 | > (gt), < (lt), >= (ge), <= (le), == (eq), != (ne) | 大小比較、等価比較。HTMLエンティティ形式も使用可能。 | 
| 論理演算子 | and, or, not (!) | 論理積、論理和、否定 | 
| 条件演算子 (三項演算子) | (condition) ? then : else | 条件に基づいて値を返します。 | 
| エルビス演算子 | (value) ?: defaultValue | 値が null でない場合はその値を、null の場合はデフォルト値を返します。 | 
| No-Op演算子 | _ (アンダースコア) | プレースホルダーとして機能し、何も行いません。特にプロトタイプ作成時に役立ちます。th:text="_" | 
演算子の優先順位は一般的なプログラミング言語に準じます。括弧 () を使って明示的に評価順序を指定できます。
ユーティリティオブジェクト
テンプレート内で共通のタスクを実行するための便利なオブジェクト群です。#オブジェクト名.メソッド名(...) の形式で使用します。
| オブジェクト | 説明 | 代表的なメソッド例 | 
|---|---|---|
#strings | 文字列操作ユーティリティ。 | isEmpty(), contains(), startsWith(), endsWith(), equals(), equalsIgnoreCase(), toUpperCase(), toLowerCase(), substring(), replace(), trim(), length(), arrayJoin(), listJoin(), capitalize(), capitalizeWords(), abbreviate() | 
#numbers | 数値操作・フォーマットユーティリティ。 | formatInteger(), formatDecimal(), formatCurrency(), formatPercent(), sequence() | 
#dates | java.util.Date オブジェクトのフォーマット・操作ユーティリティ。 | format(), createNow(), createToday(), day(), month(), year(), dayOfWeek(), dayOfWeekName(), monthName() | 
#calendars | java.util.Calendar オブジェクトのフォーマット・操作ユーティリティ。#dates と似ています。 | format(), createNow(), createToday(), day(), month(), year(), etc. | 
#temporals (Thymeleaf 3+) | Java 8 Date/Time API (java.time) オブジェクトのフォーマット・操作ユーティリティ。 | format(), day(), month(), year(), dayOfWeek(), hour(), minute(), second(), createNow(), createToday() | 
#lists | java.util.List のユーティリティ。 | toList(), size(), isEmpty(), contains(), containsAll(), sort() | 
#arrays | 配列のユーティリティ。 | toArray(), length(), isEmpty(), contains(), containsAll() | 
#sets | java.util.Set のユーティリティ。 | toSet(), size(), isEmpty(), contains(), containsAll() | 
#maps | java.util.Map のユーティリティ。 | size(), isEmpty(), containsKey(), containsValue() | 
#aggregates | 配列やコレクションの集計ユーティリティ。 | sum(), avg() | 
#messages | メッセージ式 #{...} と同様の機能を提供します。 | msg(), msgOrNull(), arrayMsg(), listMsg(), setMsg() | 
#uris / #urls | URL/URIエンコーディング・デコーディング。 | encode(), decode(), encodePath(), encodeQueryParam() | 
#ids | 繰り返し処理などで動的な id 属性値を生成するのに役立ちます。 | seq(), prev(), next() | 
#ctx / #request / #response / #session / #servletContext | Webコンテキスト関連オブジェクトへのアクセス。(環境によっては利用できない場合があります) | #request.getParameter(), #session.getAttribute(), #ctx.locale, #servletContext.contextPath | 
#locale | 現在のリクエストのロケール (java.util.Locale) を取得します。 | #locale.country, #locale.language | 
#execInfo | テンプレート処理に関する情報 (テンプレート名、処理日時など) を取得します。 | #execInfo.templateName, #execInfo.processedDate | 
#objects | オブジェクト操作ユーティリティ (null チェックなど)。 | nullSafe(), arrayIsNull(), listIsNull(), setIsNull(), mapIsNull() | 
#bools | 真偽値操作ユーティリティ。 | isTrue(), isFalse() | 
これらは標準で提供される主なユーティリティオブジェクトです。Spring Framework と連携している場合は、さらに Spring 固有のユーティリティオブジェクト (#themes, #mvc など) が利用可能になることがあります。
インライン処理
HTML タグの属性を使わずに、テキストノードや JavaScript / CSS コード内に直接 Thymeleaf の式を埋め込む方法です。
| 構文 / 属性 | 説明 | 使用例 | 
|---|---|---|
[[...]] | テキストインライン。th:text と同等で、エスケープされます。 |  | 
[(...)] | テキストインライン(アンエスケープ)。th:utext と同等で、エスケープされません。 |  | 
th:inline="text" | 要素全体でテキストインライン処理 [[...]] / [(...)] を有効にします。通常 <body> や特定の <div> に設定します。 |  | 
th:inline="javascript" | <script> タグ内で JavaScript インライン処理を有効にします。Thymeleaf 式の結果を JavaScript の構文として適切に出力します(文字列はクォートされ、オブジェクトは JSON にシリアライズされるなど)。 | 
  | 
th:inline="css" | <style> タグ内で CSS インライン処理を有効にします。主に式の結果を CSS の値として埋め込む際に使用します。 |  | 
th:inline="none" | 親要素でインライン処理が有効になっている場合に、特定の要素でインライン処理を無効にします。 |  | 
コメントとブロック
テンプレート内にコメントを記述する方法や、特定の属性を持たないコンテナとして機能する要素について説明します。
| 種類 | 説明 | 使用例 | |
|---|---|---|---|
| 標準HTML/XMLコメント | <!-- ... --> | 通常のコメント。最終的な出力にも含まれます。 |  | 
| パーサーレベルコメントブロック | <!--/* ... */--> | Thymeleaf パーサーによって処理され、最終的な出力からは削除されます。テンプレートのロジックに関するコメントに適しています。 |  | 
| プロトタイプオンリーコメントブロック | <!--/*/ ... /*/--> | 静的なプロトタイプとしてテンプレートを開いた場合にのみ表示され、Thymeleaf によって処理される際には削除されます。 |  | 
th:block | 属性を適用するためだけの、出力されない匿名の要素です。th:each や th:if などを適用したいが、適切なHTMLタグがない場合に使用します。 |  |