Controllerから値を画面に渡す方法を完全解説!初心者でもわかるModelの使い方
新人
「Spring Bootで画面にデータを表示したいんですけど、どうやってControllerから値を渡すんですか?」
先輩
「それはModelという仕組みを使ってできるよ。Controllerでデータを用意して、HTMLテンプレートに渡すんだ。」
新人
「Modelって何なんですか?あまりイメージが湧かなくて…」
先輩
「じゃあ、今日はControllerの役割から順番に説明していこうか。」
1. Controllerとは何か(役割や役目)
Controller(コントローラ)は、Spring Bootアプリケーションにおいて非常に重要な役割を担います。ユーザーがブラウザからURLにアクセスしたときに、そのリクエストを受け取り、処理を行い、どのHTMLファイルを表示するかを判断するのがControllerの役目です。
たとえば「http://localhost:8080/greeting」にアクセスがあったとき、対応するControllerが呼び出され、必要なデータを準備してテンプレートに渡します。
以下はControllerの基本的なサンプルです。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class GreetingController {
@GetMapping("/greeting")
public String greeting() {
return "greeting";
}
}
このように、@Controllerと@GetMappingを使ってURLとHTMLテンプレートを結びつけます。Spring Bootでは、Controllerが画面表示の入り口になるのです。
2. Controllerから画面に値を渡すとはどういうことか
単にHTMLを表示するだけではなく、「ようこそ○○さん」のように動的に表示を変えるには、ControllerからHTMLテンプレートにデータを渡す必要があります。
そのときに使うのがModelというオブジェクトです。ControllerのメソッドにModelを引数として渡し、addAttribute()メソッドでデータを設定します。
以下は、名前を渡すサンプルです。
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("name", "山田さん");
return "hello";
}
このようにしておけば、HTMLテンプレート内で${name}という記述を使って、「山田さん」を表示できます。
Spring Boot Model 使い方として、addAttributeメソッドは最も基本的な書き方です。
3. Modelとは何か(役割と仕組み)
Modelは、ControllerからHTMLテンプレートに値を渡すための「データの入れ物」です。
Spring Bootの仕組みでは、Modelにデータを入れると、そのデータはテンプレートエンジン(Thymeleafなど)を通じてHTMLに展開されます。
たとえば、Controllerで次のように書いた場合:
model.addAttribute("message", "こんにちは、Spring Boot!");
HTML側ではこのように記述することで、画面に表示できます。
<p th:text="${message}">ここにメッセージが表示されます</p>
このように、ModelはControllerとテンプレートの橋渡し役です。データベースから取得した情報を画面に出すときにも、このModelを使って値を渡します。
「Controller 値 渡す」方法として、このModelの仕組みを理解することがSpring Boot開発の第一歩です。
4. Modelを使った値の渡し方(addAttributeの基本的な使い方)
さて、ここからは実際にModelを使って値を画面に渡す方法を詳しく見ていきましょう。Spring Boot Model 使い方の中でも最も基本となるのが、addAttribute()メソッドを使うやり方です。
以下の例では、「こんにちは、〇〇さん」というメッセージを画面に表示させるControllerを作成します。
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 HelloController {
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("userName", "田中太郎");
return "hello";
}
}
model.addAttribute("userName", "田中太郎");の部分で、キー「userName」と値「田中太郎」をModelに追加しています。これにより、Thymeleafテンプレートで${userName}と書くと、「田中太郎」が表示されます。
このようにController 値 渡すときには、addAttributeを使ってModelにデータを設定します。
5. ControllerとHTMLテンプレートの連携(Thymeleafとの関係)
次に、Controllerで渡した値をどのようにHTML側で受け取って表示するのかを説明します。ここで使うのが「Thymeleaf(タイムリーフ)」というテンプレートエンジンです。
Spring Bootでは、デフォルトでThymeleafが使えるようになっているので、特別な設定をしなくても利用できます。Thymeleafは、HTMLの中に特殊な属性(th:textなど)を書くことで、Modelから受け取った値を埋め込むことができます。
たとえば、Controllerで先ほどのように「userName」を渡していた場合、HTMLファイル(resources/templates/hello.html)では以下のように記述します。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Hello Page</title>
</head>
<body>
<p th:text="'こんにちは、' + ${userName} + 'さん!'">ここにメッセージが表示されます</p>
</body>
</html>
このように、th:text属性を使うことで、Modelに追加された値をHTMLの中に動的に表示できます。これが、Spring BootとThymeleafを使った基本的なデータ連携の流れです。
この仕組みを理解することで、「Spring Boot Model 使い方」や「Thymeleaf 表示方法」が自然に身につきます。
6. 実際に値を表示するHTMLの書き方(th:textの使用例)
それでは、実際に値を表示するHTMLの書き方をもう少し具体的に説明します。初心者でもわかりやすいように、HTML構造はできるだけシンプルにしています。
以下は、Controllerから渡された複数の値をHTMLで表示するサンプルです。
@GetMapping("/info")
public String info(Model model) {
model.addAttribute("title", "プロフィール情報");
model.addAttribute("name", "佐藤花子");
model.addAttribute("age", 29);
return "info";
}
このControllerに対応するHTMLは以下のようになります。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title th:text="${title}">タイトル</title>
</head>
<body>
<h1 th:text="${title}">タイトル</h1>
<p th:text="'名前:' + ${name}">名前を表示</p>
<p th:text="'年齢:' + ${age} + '歳'">年齢を表示</p>
</body>
</html>
th:textを使うことで、動的に値をHTMLに埋め込むことができます。表示する値はControllerでModelに追加されたものなので、Thymeleaf側で特別な設定は必要ありません。
また、PleiadesでこのアプリケーションをGradleプロジェクトとして実行する場合は、resources/templatesフォルダの中に上記のHTMLを保存しておきましょう。
このように、Controller 値 渡すときの定番パターンとして、ModelとThymeleafの組み合わせを使うことが一般的です。
7. 複数の値を渡す方法(文字列・数値・日付など)
ここでは、Spring BootのControllerから複数のデータ型の値を画面に渡す方法を紹介します。「Spring Boot Model 使い方」として、文字列だけでなく数値や日付などもModelを使って渡せることを理解しておくと実務で役立ちます。
以下は、名前(文字列)、年齢(整数)、現在日時(日付)をModelに追加してHTMLテンプレートに渡す例です。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import java.time.LocalDateTime;
@Controller
public class InfoController {
@GetMapping("/profile")
public String profile(Model model) {
model.addAttribute("name", "鈴木一郎");
model.addAttribute("age", 35);
model.addAttribute("now", LocalDateTime.now());
return "profile";
}
}
このように、文字列や数値、日付型(LocalDateTime)など、さまざまなデータをModelに追加できます。
次に、これらの値を受け取って表示するHTMLテンプレートの書き方を見ていきましょう。
8. 画面側での取り扱い(複数値の埋め込み表示)
テンプレートエンジンであるThymeleafを使って、Controllerから渡された複数の値をHTMLに表示する方法を紹介します。
先ほどの/profileのControllerに対応するテンプレートは以下のようになります。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>プロフィール</title>
</head>
<body>
<h1>プロフィール詳細</h1>
<p th:text="'氏名:' + ${name}">氏名</p>
<p th:text="'年齢:' + ${age} + '歳'">年齢</p>
<p th:text="'現在時刻:' + ${#temporals.format(now, 'yyyy/MM/dd HH:mm:ss')}">現在時刻</p>
</body>
</html>
${#temporals.format(now, 'yyyy/MM/dd HH:mm:ss')}の部分では、Thymeleafのtemporalsユーティリティを使って、日付を整形して表示しています。
このようにテンプレートエンジンを使えば、Javaのデータを画面上に簡単に展開できます。「Thymeleaf 表示方法」の基本として、日付フォーマットや文字列連結の書き方はしっかり押さえておきましょう。
実行結果のイメージ:
- 氏名:鈴木一郎
- 年齢:35歳
- 現在時刻:2025/07/09 15:30:45
9. 初心者がやりがちなミスとその対処法(変数名の不一致、テンプレート配置ミスなど)
ここでは、初心者が「Controller 値 渡す」際によくあるミスとその対処法をまとめて紹介します。Spring BootをPleiadesで使う場合にも注意すべきポイントがいくつかあります。
(1)変数名の不一致
ControllerでModelに追加したキー名と、HTML側で参照する変数名が一致していないと、画面に値が表示されません。
// Controller側
model.addAttribute("username", "佐藤太郎");
<!-- 間違ったHTML -->
<p th:text="${userName}">ユーザー名</p>
↑この場合、usernameとuserNameが異なるため、画面上では何も表示されません。
正しくは以下のように書きます:
<!-- 正しいHTML -->
<p th:text="${username}">ユーザー名</p>
(2)テンプレートファイルの配置場所が間違っている
HTMLテンプレートは必ずsrc/main/resources/templatesフォルダの中に置きましょう。
それ以外の場所に置くと、テンプレートが見つからないというエラーになります。
(3)HTMLにxmlns属性が抜けている
Thymeleafを使うには、HTMLタグにxmlns:th="http://www.thymeleaf.org"の宣言が必要です。
<!-- 必須の宣言 -->
<html xmlns:th="http://www.thymeleaf.org">
この記述が抜けていると、th:textなどのThymeleaf属性が正しく動作しません。
(4)Javaコードのスペルミス
addAttributeのメソッド名を間違えて記述する例もよくあります。
// 間違い
model.addAtrribute("title", "タイトル"); // スペルミス
正しくは以下のとおりです。
model.addAttribute("title", "タイトル"); // 正しい書き方
(5)Gradle依存関係の不足
Thymeleafを使うには、Gradleのビルドファイル(build.gradle)に以下の依存関係が追加されている必要があります。
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
}
Pleiadesでプロジェクトを作成するとき、「Thymeleaf」にチェックを入れておけば、自動で追加されるので安心です。
まとめ
今回は、「Controller 値 渡す」ためのModelの使い方について、さらに一歩進んだ内容を解説しました。
- 複数のデータ型(文字列・数値・日付)をModelで渡せる
- Thymeleaf 表示方法を使って複数の値を画面に埋め込める
- テンプレートエンジンとしてThymeleafを正しく使うには構文や宣言が必要
- 初心者がよく起こすミスには、変数名の不一致やテンプレート配置場所のミスがある
実際にPleiadesで手を動かしながら、値を渡して画面に表示する流れを繰り返すことで、「Spring Boot Model 使い方」や「Thymeleaf 表示方法」の基礎がしっかり身につきます。