「Spring Boot2.6」セッション属性(@SessionAttributes)アノテーションの使い方

環境
Windows10 64bit
Spring Boot 2.6.3
Spring Tool Suite 4
JDK 11
thymeleaf 3

説明
Controller の `@SessionAttributes` でセッション管理するフォームオブジェクトを指定する
オブジェクトを生成してセッションに保持します。
画面遷移してもセッションに保持したオブジェクトの値を画面に表示します。

書式
@SessionAttributes(value = “名前")

操作例
1.エンティティのクラスの定義(User.java)

package com.example.demo;

import java.io.Serializable;

public class User implements Serializable {

      /**
       * @SessionAttributesでセッションを使用するサンプル
       */
      private static final long serialVersionUID = 1L;
      private String addr;

      public User(String addr) {
            super();
            this.addr = addr;
      }

      public String getAddr() {
            return addr;
      }

}

2.コントローラのクラスの処理コード(UserController.java)

package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;

//セッションにセットする名称を指定
@Controller
@SessionAttributes(value = "citysession")
public class UserController {
      
      //コンストラクタ
      @ModelAttribute(value = "citysession")
      public User createUser() {
            //セッション変数に値をセットしてオブジェクトを生成
            User uinfo =  new User("東京");
            return uinfo;
      }

      //セッションにセットした名称のcitysessionを指定
      @GetMapping("/user")
      public String reg(@ModelAttribute("citysession") User user, Model model) {
            model.addAttribute(user);
            return "user/index";
      }
      
      //セッションにセットした名称のcitysessionを指定
      @PostMapping("/userform")
      public String confirm(@RequestParam String username, Model model, 
                  @ModelAttribute("citysession") User user) {
            model.addAttribute(user);
            model.addAttribute("username", username);
            return "user/userform";
      }
}

3.ユーザー登録画面(index.html)
登録値を送信します。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">

<head>
      <meta charset="utf-8" />
      <title>ユーザー登録 値を送信する側画面</title>
</head>

<body>
      <form method="post" th:action="@{/userform}">
            セッションオブジェクト(citysession)の値: <p th:text="${user.addr}"></p>
            名前: <input type="text" name="username" /><br>
            <input type="submit" value="送信" />
      </form>
</body>

</html>

画面にセッションオブジェクトの値を表示します。

4.確認画面(userform.html)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">

<head>
      <meta charset="utf-8" />
      <title>登録値を受け取る側画面</title>
</head>

<body>
      セッションオブジェクト(citysession)の値:<p th:text="${user.addr}"></p>
      名前:<p th:text="${username}"></p>
</body>

</html>

登録ユーザーの値を受け取ります。画面にオブジェクトの値を表示します

5.実行確認
プロジェクトを右クリックして、「実行(R)」->「Spring Boot アノテーション」をクリックします
ブラウザに以下のURLを入力するとindex.html画面が表示されます
http://127.0.0.1:8080/user
「セッションオブジェクト(citysession)の値:東京」が表示されます。

「名前」を入力して、「送信」ボタンを押下すると「userform.html」画面が表示されます。
「セッションオブジェクト(citysession)の値:東京」が表示されます。

Spring Boot

Posted by arkgame