質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

1回答

3205閲覧

SpringMVCのセッション管理について

makino

総合スコア32

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2019/03/20 17:56

編集2019/03/20 18:21

SpringMVCで、セッションの管理方法とクリアに関してわからずにいます。

かなり初心者ですがよろしくお願いします。

http://localhost:8080/sales/system/start
のURLを押すたびにセッションを初期化したいのですが、どのようにすればいいのでしょうか?

②データを確定させるまでは、Fromクラスのlistにデータを持ちまわるべきなのでしょうか?

③addボタンの押下時にRecordManager内の値が更新されています。これはなぜでしょうか?
コード上はsetをしていないのですが・・・②の質問と被りますが、最終確定の時だけ更新したいので悩んでいます。

Java

1 2@Controller 3@RequestMapping(value = "/system") 4@SessionAttributes(types = { ItemListForm.class }) 5public class SalesSystemController { 6 @Autowired 7 private MessageSource messageSource; 8 9 // 定数宣言 10 private static final String INIT = "init"; 11 private static final String ADD = "add"; 12 private static final String FIX = "fix"; 13 14 private static final String INIMSG = "従業員番号を入力してください"; 15 private static final String REFMSG = "明細に追加しました。"; 16 private static final String DELMSG = "選択された明細行を削除しました。"; 17 18 @RequestMapping(value = "/start") 19 public String init(ItemListForm form, Model model,SessionStatus sessionStatus) { 20 // ここに書いても初期化されない・・・ 21 // sessionStatus.setComplete(); 22 // 商品名リスト(プルダウン) 23 // テーブル表示用 24 form.setTempList(RecordManager.getItemList()); 25 //model.addAttribute("allList", form.getTempList()); 26 model.addAttribute("allList", RecordManager.getItemList()); 27 model.addAttribute("sNum", 1); 28 return INIT; 29 } 30 31 // 明細画面 32 @RequestMapping(params = "add") 33 public String refer(@Valid ItemListForm form, BindingResult result, Model model) { 34 35 // エラー時の動作 36 if (result.hasErrors()) { 37 model.addAttribute("allList", RecordManager.getItemList()); 38 model.addAttribute("sNum", form.getNumber()); 39 String message = messageSource.getMessage("ERRMSG_Num", null, null); 40 model.addAttribute("messageErr", message); 41 return INIT; 42 } 43 44 // 商品リスト 45 //model.addAttribute("allList", RecordManager.getItemList()); 46 model.addAttribute("allList", form.getTempList()); 47 48 // 商品IDからレコードを取得 49 Item item = RecordManager.selectItem(form.getId()); 50 51 form.setName(item.getName()); 52 model.addAttribute("message", REFMSG); 53         // 個数を足す 54 List<Item> list1 = form.getTempList(); 55 for (Item item2 : list1) { 56 if(item2.getId() == item.getId()){ 57 item2.setNumber(item2.getNumber() + form.getNumber()); 58 } 59 } 60 form.setTempList(list1); 61 62 //form.setTempList(new Item(item.getId(), item.getName(), item.getPrice(), item.getNumber())); 63 //RecordManager.updateItem(new Item(item.getId(), item.getName(), item.getPrice(), item.getNumber())); 64         //totalPriceに反映されてしまう・・・ 65 model.addAttribute("totalPrice", RecordManager.getTotalPrice()); 66 return ADD; 67 68 } 69 70 // 登録画面 71 @RequestMapping(params = "fix") 72 public String fix(Model model) { 73 return FIX; 74 } 75 76 // 確定ボタン 77 @RequestMapping(params = "decision") 78 public String decision(Model model) { 79 return INIT; 80 } 81 82 // 削除ボタン 83 @RequestMapping(params = "delete") 84 public String doUpdate(ItemListForm form, Model model) { 85 86 int cnt = form.getDelCnt(); 87 // エラー未選択時の動作 88 if(cnt == 0){ 89 String message = messageSource.getMessage("ERRMSG_Del", null, null); 90 model.addAttribute("messageErr", message); 91 model.addAttribute("allList", RecordManager.getItemList()); 92 model.addAttribute("totalPrice", RecordManager.getTotalPrice()); 93 return ADD; 94 } 95 RecordManager.deleteItem(cnt); 96 97 model.addAttribute("message", DELMSG); 98 99 if(RecordManager.getTotalPrice() == 0){ 100 model.addAttribute("allList", RecordManager.getItemList()); 101 return INIT; 102 }; 103 104 form.setDelCnt(0); 105 // 商品リスト 106 model.addAttribute("allList", RecordManager.getItemList()); 107 model.addAttribute("totalPrice", RecordManager.getTotalPrice()); 108 return ADD; 109 } 110 111} 112

Java

1public class ItemListForm { 2 3 // 変数の宣言 4 private String id; // ID 5 private String name; // 商品名 6 private int price; // 単価 7 @Min(1) 8 @Max(100) 9 private int number; // 個数 10 private int delCnt; // 削除のラジオボタン対応 11 12 private List<Item> tempList; //確定まで持ちまわる?? 13 14 public ItemListForm() { 15 16 } 17 18 /** 19 * @return id 20 */ 21 public String getId() { 22 return id; 23 } 24 25 /** 26 * @param id 27 * セットする id 28 */ 29 public void setId(String id) { 30 31中略

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

SessionStatusは、そのメソッドないしはHTTPレスポンスが出力されたタイミングでセッション情報を破棄するためのクラスです。通常はControllerでreturnする寸前で呼び出すもので、初期化には使いません。

HttpSessionを直接扱ってremoveAttributeするか、SessionスコープのBeanに対して初期化処理をするか、SessionAttributeでバインドしたBeanを初期化処理する、などをします。

投稿2019/04/08 05:03

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問