📖

[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との違い

@ModelAttributeModel#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