Thymeleaf 変数 null判定と初期化の方法を完全ガイド!初心者でも安心
新人
「Thymeleafで変数がnullだったときにどうやって安全に処理すればいいんでしょうか?」
先輩
「null判定や初期化を使えば、未定義エラーを防げるよ。HTML表示もスムーズになるし、初心者でも安心して使える方法があるんだ」
新人
「具体的にはどう書けばいいですか?」
先輩
「まずはnull判定の基本から見ていこう!」
1. null判定とは?
null判定とは、サーバー側から渡された変数がnull(値なし)かどうかを確認し、安全に処理を分岐させる仕組みです。Thymeleafではテンプレート内でnullチェックを行うことで、表示エラーを回避できます。初心者でも扱いやすい書き方があるので、まずは基本構文を知っておきましょう。
1‑1. nullを放置するとどうなる?
ControllerでModel.addAttributeした変数がnullの場合、HTML側でth:text="${name}"のように使うと空文字になるか、EL例外が発生する可能性があります。これを防ぐために、null判定を使いましょう。
2. Thymeleafでのnull判定の書き方
ThymeleafではNULLチェックにOGNLの安全ナビゲーション演算子や三項演算子を使う方法があります。以下の例で使い方を確認しましょう。
2‑1. 三項演算子でnull判定
コントローラ側でModelに値を登録し、テンプレート内で三項演算子を使ってnullかどうかで初期化や表示を切り替えます。
@GetMapping("/greet")
public String greet(Model model) {
String name = null; // 例: nullの場合もありうる
model.addAttribute("name", name);
return "greet";
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>null判定例</title></head>
<body>
<p th:text="${name} != null ? ${name} : 'ゲスト'">ここに名前かゲストが入ります</p>
</body>
</html>
このように? :を使えば、nullなら「ゲスト」と表示され、安心して使えます。
2‑2. デフォルト値を設定する書き方
三項演算子以外にも、OGNLの演算子?:を使って簡単に初期値を指定できます。
<p th:text="${name} ?: 'ゲスト'">ここにデフォルト値が入ります</p>
こちらはよりシンプルにnullチェックと初期化ができる書き方です。
3. null判定での三項演算子の使い方
三項演算子(? :)を使えば、nullかどうかで処理を簡潔に切り替えられます。初心者でも読みやすく、安全なコードになります。
3‑1. 基本形:nullかどうかを判定する
@GetMapping("/check")
public String check(Model model) {
String info = null;
model.addAttribute("info", info);
return "check";
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>null判定チェック</title></head>
<body>
<p th:text="${info} != null ? ${info} : '情報がありません'">ここに値かメッセージが入ります</p>
</body>
</html>
このように書けば、infoがnullなら「情報がありません」と表示されます。画面エラーを防ぐ基本的な方法です。
3‑2. 異なる値の初期化も可能
三項演算子では、null時だけではなく値によって初期化することもできます。柔軟な値設定に便利です。
<p th:text="${count} != null ? '個数: ' + ${count} : '個数未設定'">ここにカウント情報が入ります</p>
4. null時の初期化(デフォルト値の設定)の具体例
デフォルト値を設定すれば、nullに悩まずに済みます。ここでは、より分かりやすい例を使って説明します。
4‑1. OGNLのまるごと代替演算子
OGNLの?:を使えば、nullでも安全に表示できます。式が短く、初心者にも読めるようになります。
<p th:text="${userName} ?: '名前が設定されていません'">ここに名前が入ります</p>
上記ならnull時に「名前が設定されていません」と表示され、安全対策できます。
4‑2. 数値やリストにも初期化を設定
数値やリストもnull判定と初期化ができます。コレクションがnullの場合に空リストを表示するなど、画面の安定にもつながります。
@GetMapping("/items")
public String items(Model model) {
List<String> list = null;
model.addAttribute("list", list);
return "items";
}
<ul>
<li th:each="i : ${list} ?: ${T(java.util.Collections).emptyList()}">
<span th:text="${i}">アイテム名</span>
</li>
</ul>
listがnullなら空リストに置き換え、ループのエラーを回避しています。画面が崩れなくなる工夫です。
5. 注意点とエラー回避のコツ
null判定や初期化にはいくつか注意点があります。実際の開発で使うときに知っておきたいポイントを紹介します。
5‑1. NullPointerExceptionの回避
安全ナビゲーションや三項演算子なしで${user.name}のようなアクセスをすると、名前がnullのときに例外が発生します。常にnullチェックを忘れずに。
5‑2. 初期化はController側でも可能
初期化はテンプレート側だけでなく、Controller側で行っても構いません。業務ロジックが明確になるので、チーム開発ではControllerで初期化する方が設計しやすいこともあります。
5‑3. テキスト内で式を多用しない工夫
式を多く書くとテンプレートが読みにくくなるため、長い式はControllerで計算・初期化してModelで渡すことで、HTMLがすっきりし、維持管理しやすくなります。
5‑4. Pleiades環境での確認ポイント
Pleiades+Gradle環境では、変更後に必ずGradleのリソース更新を実行してください。テンプレートが古いままだと、null判定や初期化が反映されずにデバッグに時間がかかることがあります。
6. よくある質問とその答え(初心者が迷いやすいポイントをやさしく説明)
ここでは、初心者がThymeleafのnull判定と初期化でよく疑問に思うポイントをまとめて、わかりやすく解説します。
6‑1. 三項演算子と?:演算子はどちらが便利?
どちらもnull判定や初期化に使えますが、?:演算子はよりシンプルで読みやすいです。三項演算子は条件に応じて2種類の値を切り替えたいときに便利です。使う場面に応じて選びましょう。
6‑2. null判定は必ず必要?
はい、特に画面でデータが表示されないと困る場面では必要です。Controllerでnullが入り得る値は、必ずテンプレート内で判定しておくと安全です。
6‑3. リストがnullのときはどうしたらいい?
空リストを代入することで、Thymeleafのループ処理でもエラーを防げます。以下のように書いておくと安心です。
<ul>
<li th:each="i : ${list} ?: ${T(java.util.Collections).emptyList()}">
<span th:text="${i}">アイテム</span>
</li>
</ul>
6‑4. null判定をしても値が表示されないことがある?
モデルに渡した変数名が違う場合や、HTMLでth:textの書き方が間違っていると、nullでなくても値が表示されません。正しい変数名や属性名を使っているか確認しましょう。
7. 学習を深めるためのおすすめ情報(公式ドキュメントやサンプルなど)
最後に、Thymeleafのnull判定や初期化についてもっと理解を深めるためのリソースを紹介します。Pleiadesで開発する際も役立ちます。
7‑1. 公式ドキュメント
Thymeleafの公式サイトには、変数やスコープ、式の使い方が詳しく載っています。null判定のほかにもたくさんの使い方が書かれているので、以下のページを読んでみてください。
7‑2. 実践サンプルを自分で作ろう
Pleiades+Gradleで簡単なサンプルプロジェクトを作り、実際に三項演算子や?:演算子を使ってみましょう。自分で試すと理解が深まります。
7‑3. @Controllerのサンプルコード
以下は練習用に簡単なControllerの例です。Pleiadesでプロジェクトを作成し、このコードを試してみてください。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class NullCheckController {
@GetMapping("/demo")
public String demo(Model model) {
String userName = null; // わざとnullにしておく
model.addAttribute("userName", userName);
return "demo";
}
}
7‑4. Pleiadesでのプロジェクト作成ポイント
- Pleiadesをインストール後、Gradleプロジェクトを新規作成
- 依存関係で「Spring Web」を追加
- Thymeleafのスターターは自動で含まれるので、特別な設定は不要
この基本手順を守れば、すぐにThymeleafのnull判定のサンプルが動かせます。
7‑5. さらに学びを深めるポイント
- Controllerでの初期化処理と画面表示の役割を整理する
- 公式チュートリアルを実際に写経してみる
- ログを活用して、変数がどのタイミングでnullになるか調べる
これらを繰り返すことで、初心者でも安心してThymeleafのnull判定を使いこなせます。
Thymeleafの変数null判定と初期化は、Webアプリケーション開発で必須のテクニックです。Pleiades+Gradle環境で練習しながら、確実に習得していきましょう!