Thymeleaf if文で空文字を判定する方法|初心者でもわかるSpring Boot入門
新人
「Thymeleafでif文を使って空文字を判定するにはどうしたらいいですか?」
先輩
「空文字の判定はよくある処理だね。Thymeleafのif文で空文字かどうかを判定して表示を切り替えることができるよ。Spring BootのPleiades+Gradle環境でも簡単に実装できるから安心して。」
新人
「空文字ってそもそも何ですか?それとどう違うのかも教えてほしいです!」
先輩
「空文字とは、文字が何も入っていない長さ0の文字列のことだよ。Webフォームでユーザーが何も入力しなかった場合などによく使う概念だね。nullとは違うけど、Thymeleafではどちらも扱い方を知っておく必要があるよ。」
1. Thymeleafとは?if文の基本的な役割
ThymeleafはSpring BootのWebアプリケーションでよく使われるテンプレートエンジンです。HTMLファイルの中にJavaの変数や条件を埋め込むことができ、動的なページ生成が可能です。
特にth:if属性は、条件式を使って要素の表示・非表示を切り替えるために使われます。たとえば、ユーザーの入力値が空文字かどうかを判定して、エラーメッセージを表示する場合に使います。
2. 空文字とは何か?Webフォームでの空文字の意味と扱い方
空文字とは、「""」のように長さ0の文字列を指します。ユーザーがフォームの入力欄を空欄のまま送信した場合、送信される値は空文字となります。
一方、nullは値が存在しないことを意味します。たとえば、変数に何もセットされていない状態がnullです。Thymeleafで空文字を判定する場合は、この空文字かどうかを条件に含めて処理を行います。
実際のフォーム入力画面で、名前欄が空だった場合に「名前は必須です」と表示したい場合、空文字判定はとても重要な処理となります。
3. Javaコントローラでの空文字のモデル設定例
Spring Bootのコントローラでは、Pleiades+Gradle環境で下記のようにモデルに入力値を渡します。今回は名前の空文字チェックを行い、空ならisNameEmptyをtrueに設定します。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class FormController {
@GetMapping("/checkName")
public String checkName(@RequestParam(name="name", required=false) String name, Model model) {
boolean isNameEmpty = (name == null || name.isEmpty());
model.addAttribute("isNameEmpty", isNameEmpty);
model.addAttribute("name", name);
return "formPage";
}
}
このようにコントローラでnullや空文字を判定し、その結果をThymeleafのテンプレートに渡します。
4. Thymeleafテンプレートでの空文字判定の基本例
Thymeleafのテンプレートでは、渡されたisNameEmptyをth:ifで判定して表示を切り替えます。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>空文字判定フォーム</title>
</head>
<body>
<form th:action="@{/checkName}" method="get">
<label>名前: <input type="text" name="name" th:value="${name}"/></label>
<button type="submit">送信</button>
</form>
<div th:if="${isNameEmpty}" class="text-danger">
名前は空白にできません。必ず入力してください。
</div>
</body>
</html>
このテンプレートは、名前が空の場合のみエラーメッセージを表示します。Spring Boot + Pleiades + Gradle環境で動作確認できます。
3. Thymeleafのif文で空文字を判定する基本的な書き方
Thymeleafで空文字判定を行う場合、th:if属性に空文字かどうかの条件を記述します。具体的には、変数が空文字「""」と等しいかどうかを判定します。以下のような書き方が基本です。
<div th:if="${name == ''}" class="text-danger">
名前が空です。入力してください。
</div>
この例では、モデルに渡されたname変数が空文字の場合にだけ、エラーメッセージを表示します。Spring Boot + Pleiades + Gradle環境で動作確認できます。
ただし、このままだとnullの場合は判定されません。nullが来る可能性がある場合は、後述のnullチェックを組み合わせて使うのが一般的です。
4. nullとの違いとnullチェックの方法
空文字とnullは異なります。空文字は長さ0の文字列ですが、nullは値が存在しないことを意味します。Thymeleafのif文でnullを判定する場合は、== nullや!= nullを使います。
<div th:if="${name == null}" class="text-danger">
名前が入力されていません(null判定)。
</div>
null判定は重要で、nullのまま空文字判定をすると例外が発生する可能性があります。したがって、nullかどうかを先に確認してから空文字判定を行うことが推奨されます。
Spring Bootのコントローラ側でもnullチェックを行い、適切な値をモデルに渡すことで安全に表示制御が可能です。
5. 複数条件の組み合わせ例(空文字とnullの両方を判定する方法)
実際には、空文字かnullのどちらかの場合にエラー表示したいことが多いです。Thymeleafのif文では論理演算子「or」を使って複数条件を組み合わせられます。
<div th:if="${name == null or name == ''}" class="text-danger">
名前が入力されていません。必ず入力してください。
</div>
この条件では、nameがnullまたは空文字の場合にメッセージを表示します。論理演算子はThymeleafの条件式でよく使われるので覚えておくと便利です。
下記のコントローラコードは、nameの値を受け取り、Thymeleafに渡す例です。nullや空文字も含めて判定しています。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class FormController {
@GetMapping("/checkName")
public String checkName(@RequestParam(name="name", required=false) String name, Model model) {
boolean isNameEmptyOrNull = (name == null || name.isEmpty());
model.addAttribute("isNameEmptyOrNull", isNameEmptyOrNull);
model.addAttribute("name", name);
return "formPage";
}
}
Thymeleafテンプレート側では、モデルのisNameEmptyOrNullを使って判定し、エラーメッセージを表示します。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>空文字とnull判定フォーム</title>
</head>
<body>
<form th:action="@{/checkName}" method="get">
<label>名前: <input type="text" name="name" th:value="${name}"/></label>
<button type="submit">送信</button>
</form>
<div th:if="${isNameEmptyOrNull}" class="text-danger">
名前が空か未入力です。必ず入力してください。
</div>
</body>
</html>
このように、Spring BootのPleiades+Gradle環境で@Controllerを使い、Thymeleafのif文で空文字とnullの両方を安全に判定できます。
6. 実務でよくある空文字判定の応用例(フォームバリデーションやエラーメッセージ表示)
実務のWeb開発では、フォーム入力に対するバリデーション処理は必須です。ユーザーが入力欄を空白のまま送信した場合、空文字判定を行い、適切なエラーメッセージを表示することが重要です。Spring BootとThymeleafの組み合わせは、こうした処理をシンプルに実装できるため、Pleiades+Gradle環境での開発に最適です。
たとえば、ユーザー登録フォームの「メールアドレス」欄が空文字だった場合、th:ifで空文字判定し、ユーザーに「メールアドレスは必須項目です」と表示します。これによりユーザビリティを向上させ、不正なデータの登録を防げます。
<div th:if="${email == null or email == ''}" class="text-danger">
メールアドレスは必須項目です。
</div>
このようなバリデーションは、コントローラで空文字とnullをチェックし、その結果をThymeleafに渡して制御するのが基本です。論理演算子「or」を使って複数条件を組み合わせる点も重要なポイントです。
7. サンプルコードで学ぶ!実際のコントローラとThymeleafテンプレートの空文字判定
ここでは、Spring Boot + Pleiades + Gradle環境での実践例として、名前入力欄の空文字判定を行うコントローラとThymeleafテンプレートを紹介します。@Controllerを使い、シンプルながら実務に役立つ実装例です。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class UserController {
@PostMapping("/submitForm")
public String submitForm(@RequestParam(name="username", required=false) String username, Model model) {
boolean isUsernameEmpty = (username == null || username.trim().isEmpty());
model.addAttribute("isUsernameEmpty", isUsernameEmpty);
model.addAttribute("username", username);
return "userForm";
}
}
このコントローラでは、ユーザー名がnullか空文字(空白のみも含む)かを判定し、isUsernameEmptyとしてビューに渡しています。次に、Thymeleafテンプレートでの表示制御例です。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>ユーザーフォーム</title>
</head>
<body>
<form th:action="@{/submitForm}" method="post">
<label>ユーザー名: <input type="text" name="username" th:value="${username}"/></label>
<button type="submit">送信</button>
</form>
<div th:if="${isUsernameEmpty}" class="text-danger">
ユーザー名は空白にできません。必ず入力してください。
</div>
</body>
</html>
このテンプレートは、空文字やnullのユーザー名入力時に赤いエラーメッセージを表示します。Spring BootのPleiades+Gradle環境に適したコードで、初心者でも理解しやすい構成です。
8. 初心者がつまずきやすいポイントと学習のコツ
Thymeleafのif文で空文字判定をする際、初心者がよくつまずくポイントがあります。まず、nullと空文字は別物だという認識が重要です。nullを考慮しないと、実行時にエラーになる可能性があります。
また、Thymeleafの条件式では、JavaScriptの「&&」「||」は使えません。代わりに「and」「or」を使う必要があり、ここで間違えるケースが多いです。公式ドキュメントやサンプルコードを参照しながら学習しましょう。
学習のコツは、実際に自分でフォームを作成し、空文字やnullを送信して動作を確認することです。エラーメッセージが正しく表示されるかを試すことで、理解が深まります。Pleiades+Gradle環境での開発に慣れることも大切です。
最後に、条件式を複雑にしすぎず、可能な限りコントローラ側で判定処理を行い、テンプレートではシンプルなboolean値を使う設計を心がけましょう。これが保守性の高いコードを書くコツです。