SE_BOKUのまとめノート的ブログ

SE_BOKUが知ってること・勉強したこと・考えたことetc

セッションを使って画面間で情報を受け渡す STS +Spring Boot+thymeleaf 

Webアプリケーションには必須のセッション管理をやってみます。

STS3(3.9.6)+SpringBoot2.0+Tymeleaf3.0迄動作確認しています。

f:id:arakan_no_boku:20190222012501j:plain

 

セッション
 

HTTPは、ご存知の通りステートレス(クライアントとのセッション情報を保存しない)なので、複数の画面間で共有しなければならない情報は自前で管理しないといけません。 

セッション管理で最初にやることは、セッション情報を保持するためのクラス(Bean)を作ることです。

 

セッション情報を保持するためのクラス(Bean)

 

今回は、簡単なメッセージをひとつだけ管理するクラスを作ります。

@Component
@Scope(value= "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class SessionSample implements Serializable {

      private static final long serialVersionUID = 6334063099671792256L;

      private String msg;

      public String getMsg() {
             return msg;
      }

      public void setMsg(String msg) {
             this.msg = msg;
      }

}

ポイントは3つです。

普通にBeanを定義して、上記のアノテーションをつけることでセッション管理クラス(Session Bean)になります。 

このSession Beanを情報の受け渡しをしたいコントローラクラスで使います。 

今回はサンプルとして、入力されたIDを利用したメッセージをセッションに保存し、別の画面でそれを表示してみます。

 

入力画面のコントローラクラス

 

@Autowiredアノテーションをつけて、セッション管理Bean(sessionSample)を利用できるようにしています。

@Autowired
protected SessionSample sessionSample;

@RequestMapping(value = "/outpg01", method = RequestMethod.POST)
public String confirm(@Validated @ModelAttribute Hello3Form form, BindingResult result, Model model) {
     StringBuilder sb = new StringBuilder();
     sb.append("セッションの受け渡しテスト用:入力したIDは");
     sb.append(form.getInputPid());
     sb.append("です。");
     sessionSample.setMsg(sb.toString());
     return "outpg01";
}

セッション管理クラス(上記だと、SessionSampleクラス)が、そのままセッションスコープで値を保持してくれるので、値の受け渡しは普通にgetter、setterでやれば良いだけです。

 

メッセージを表示するクラス

 

上でセッションに書き込んだメッセージを表示するコントローラクラスです。

@Controller
public class Hello2Controller {
     @Autowired
     protected SessionSample sessionSample;

     @RequestMapping("/hello2")

     public String hello(Model model) {

            model.addAttribute("msg", sessionSample.getMsg());

            return "hello2";
     }

}

 

動作確認

 

入力画面で、PIDを入力してみます。

f:id:arakan_no_boku:20170320225656j:plain

それを異なるコントローラクラスを通して、結果表示します。

f:id:arakan_no_boku:20170320225736j:plain

 受け渡しは問題なくいけてるようです。  


 STS3+Spring Boot +thymeleaf 関連記事

 

入力画面に関連する記事

画像をSUBMITボタン代わりに使う

ラジオボタンとラジオボタングループを使う 

ラジオボタンとラジオボタングループを使う 

チェックボックスを使う。 

HTMLのタグの閉じ忘れで例外が発生する!

プルダウンリストとマルチセレクトボックスを使う。

今度はテキストエリアで複数行入力する。 

テキストボックスの入力と基本的なチェックを使う。

 

参照画面・画面遷移に関連する記事

参照画面:テーブルを使い、行毎に色分けした一覧表を表示する。 

参照画面:条件に一致した時のみHTML要素を出力する。

セッションを使って画面間で情報を受け渡す 

画面遷移:GET時のリクエストパラメータを受け取る 

日本語しか使わなくても、i18N対応はする意味がある。

 

入力チェックに関連する記事

入力チェック:未入力時に空文字が渡される仕様を回避する。 

入力チェック:@Patternと正規表現で独自チェックする。

入力チェック:アノテーション定義を自分で作る。(再利用版)

入力チェック用アノテーション定義を自分で作る。(独自実装版)

入力チェック:複数項目の相関チェックアノテーションの作り方

 

データアクセス・その他に関連する記事

データアクセス:Jprepositoryを使って簡単にCRUDする。 

データアクセス:ネイティブなSQL文を実行する 

クラスパス内の静的ファイルにアクセスする 

SpringBootだとログの書き出しも楽ちんです。 

SpringBootプロジェクトでJUNIT4を使った単体テストをする。