📖
[Spring]Model.addAttribute()
Model.addAttribute()
Model
は、ControllerからViewへ値を渡すための仕組みです。addAttribute
メソッドを使って、Viewで使う変数を定義します。
model.addAttribute("属性名", 値);
Controller側
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "こんにちは!");
return "hello"; // hello.htmlにmessage変数を渡す
}
View側
<p th:text="${message}"></p> <!-- こんにちは! -->
@ModelAttribut
との違い
@ModelAttribute
とModel#addAttribute
は、使い方・目的・タイミングに違いがあります。
比較項目 | @ModelAttribute |
model.addAttribute() |
---|---|---|
目的 | リクエストとオブジェクトのバインド | Viewに渡す任意の値の登録 |
タイミング | メソッド引数に適用 → 自動で値を設定 | Controllerの中で手動で呼び出す |
適用対象 | クラスや引数、メソッドに使う |
Model インスタンスのメソッド |
主な用途 | フォーム送信時のオブジェクト受け取り | Viewに単純な値を渡す |
以下はそれぞれの具体例です。
@GetMapping("/form")
public String showForm(Model model) {
model.addAttribute("user", new User()); // Viewに空のUserオブジェクトを渡す
return "form";
}
@PostMapping("/form")
public String handleForm(@ModelAttribute("user") User user) {
// 送信されたformの値が自動でuserにバインドされる
return "result";
}
使い分け
状況 | 使用するもの |
---|---|
Viewに文字列・数値などを渡す | model.addAttribute() |
HTMLフォーム → Javaオブジェクト変換 | @ModelAttribute |
初期データを毎回自動でModelに渡す |
@ModelAttribute をメソッドに付ける |
Discussion