モデル

Modelオブジェクト

SpringのモデルはSpring MVCフレームワークの一部で、コントローラーで処理したModelオブジェクトをビューに渡します。

コントローラーメソッドの引数で定義

コントローラーでモデルを使用するには、アクションメソッドの引数にModelオブジェクトを宣言します。

public String メソッド名(Model model) {

}

addAttribute()

コントローラーからビューにデータを受け渡すには、Model.addAttribute() メソッドを利用します。 引数に keyvalue を設定することで、Viewでオブジェクトが利用できます。

Model.addAttribute(key, value);

Modelの利用

Modelオブジェクトで処理

引数にModelオブジェクトを追加

index() メソッドの引数に、Modelオブジェクトを指定します。

controllers/HomeController.java
...
//Modelコーディングで自動インポート
import org.springframework.ui.Model;
...

@Controller
public class HomeController {
    
    @GetMapping("/")
    // 引数にModelクラスのオブジェクト
    public String index(Model model) {
        return "home/index";
    }

}
  • 引数にModelをコーディングすると、Modelクラスが自動インポートされます。

オブジェクトの受け渡し

addAttribute() で、ビューにキーmessageでオブジェクトを受け渡します。

@Controller
public class HomeController {
    
    @GetMapping("/")
    public String index(Model model) {
        String message = "My News";
        //ビューにデータ受け渡し
        model.addAttribute("title", title);
        return "home/index";
    }

}

ビュー表示

ビューファイル「index.html」で th:textプロパティを追加し、addAttribute() メソッドで渡したオブジェクト「title」を設定します。

templates/home/index.html
<main layout:decorate="layouts/default" layout:fragment="contents">
  <div>
    <!-- オブジェクト表示 -->
    <h1 class="pt-3 pb-3" th:text="${title}"></h1>
    ...
  </div>
...
</main>
結果

ModelAndView

ModelAndViewとは

ModelAndViewは、コントローラコントローラがモデルとビューの情報を結合してまとめて管理するためのSpring MVCのクラスです。SpringのModelAndViewを利用すると、モデルとビューの両方の情報を保持でき、柔軟な処理ができます。

ModelAndViewの利用方法

アクションメソッドの引数にModelAndViewオブジェクトを定義し、戻り値として返します。

public ModelAndView メソッド名(ModelAndView view) {
    //処理
    return view;
}

ModelAndViewのメソッド

ModelAndViewでは、addObject()setViewName() がよく利用されるメソッドです。

addObject()

ModelAndViewにオブジェクトを追加するには、addObject() メソッドで設定します。

ModelAndView.addObject("key", "value");
@Controller
public class MyController {

    @RequestMapping("/example")
    public ModelAndView example(ModelAndView view) {
        modelAndView.addObject("message", "Hello, Spring!");

        return view;
    }
}

setViewName()

setViewName() メソッドでも、ビュー名を設定できます。

ModelAndView.setViewName("ビュー名");
@Controller
public class MyController {

    @RequestMapping("/example")
    public ModelAndView example(ModelAndView view) {
        modelAndView.addObject("message", "Hello, Spring!");
        //templates/sample/example.html をテンプレート
        modelAndView.setViewName("sample/example");

        return view;
    }
}

ModelAndViewで処理

「HomeController」の index() を、ModelAndViewで処理するよう修正します。

@Controller
public class HomeController {
    
    @GetMapping("/")
    //データ型をModelAndViewに変更
    public ModelAndView index(ModelAndView view) {
        String title = "My News";
        //ビューデータの受け渡し処理変更
        view.addObject("title", title);
        //ビュー名の設定
        view.setViewName("home/index");
        //ModelAndViewを返す
        return view;
    }

}

Modelオブジェクトと同様の結果となります。

結果

リダイレクト

リダイレクトとは

リダイレクト(Redirect)は、Webページのアクセスを別のURLに転送する方法です。リダイレクトを利用する目的はさまざまなで使用されます。

ウェブページの移動

Webページが移動したとき、古いURLから新しいURLへのリダイレクトすることで、ユーザーが自動的に新しい場所に誘導できます。Webアプリが過剰なトラフィックで処理できないときに、別のサーバーにリダイレクトできます。

データ処理後の移動

Webアプリのプログラムでデータ処理後に、別のページにリダイレクトするのに利用します。これによりユーザにたくさんの操作をさせない、バグの少ないアプリ開発ができます。

認証とセキュリティ

認証が必要なページにアクセスするとき、ログインページなどにリダイレクトします。セキュリティ上の理由から、特定のリソースやページへのアクセス制限が必要です。

エラーハンドリング

存在しないページやリソースにアクセスしたとき、エラーページを表示する代わりに、別のリソースやページへのリダイレクトできます。

Springのリダイレクト

リダイレクトする場合は、setViewName() に「redirect:」をつけたURLパスで設定します。

ModelAndView.setViewName("redirect:リダイレクト先のURLパス");

リダイレクト処理

アクションメソッド cancel() を追加し、トップページにリダイレクトしてみましょう。

    @GetMapping("/cancel")
    public ModelAndView cancel(ModelAndView view) {
        view.setViewName("redirect:/");
        return view;
    }

Spring超入門