以下のadd.jsp画面で商品をプルダウンから追加し、登録画面への遷移、リストからの削除などの動作を行なっていきます。
ですが、以下の実装ではセッションの管理ができておらず、
新規セッションで、明細操作(追加)をした時に、起動中の売上明細情報も一覧に表示されてしまい、2つ画面の明細操作(追加)が他の画面へ影響されています。
そこで、以下のソースを1つ目の画面で入力した内容が、2つ目の画面に反映されないようにしたいのですが、どうすれば良いのかわからないので教えていただきたいです。
よろしくお願いします
SalesSystemController.java
java
1package jp.practice.sales; 2 3import javax.servlet.http.HttpServlet; 4import javax.servlet.http.HttpServletRequest; 5 6import org.springframework.stereotype.Controller; 7import org.springframework.ui.Model; 8import org.springframework.validation.BindingResult; 9import org.springframework.web.bind.annotation.RequestMapping; 10import org.springframework.web.bind.annotation.SessionAttributes; 11 12/** 13 * Handles requests for the application home page. 14 */ 15@Controller 16@RequestMapping(value = "/system") 17@SessionAttributes(types = SalesForm.class) 18public class SalesSystemController extends HttpServlet { 19 private static final String ERRMSG = "点数には1以上100以下の整数を入力してください。"; 20 private static final String ADDMSG = "明細に追加しました。"; 21 private static final String FIXMSG = "以下のように売上登録しました。"; 22 private static final String DELETE = "選択された明細行を削除しました。"; 23 private static final String ERRMSG2 = "明細行を選択して下さい。"; 24 25 /** 26 * 起動時および登録完了時に呼ばれる。初期画面を表示する。 27 * @param form フォームオブジェクト 28 * @param model モデルオブジェクト 29 * @return Viewとしてinit.jspを指定 30 */ 31 @RequestMapping(value = "/start") 32 public String init(SalesForm form, Model model) { 33 34 model.addAttribute("nameList", RecordManager.makeNameList()); 35 //model.addAttribute("nameList", RecordManager.makeNameList()); 36 //form.setGoodsName(RecordManager.getFirstPersonName()); 37 return "init"; 38 } 39 40 /** 41 * 初期画面から呼ばれる。選択した商品の明細追加画面を表示する。 42 * @param form フォームオブジェクト 43 * @param model モデルオブジェクト 44 * @return Viewとしてadd.jspを指定 45 */ 46 @RequestMapping(params = "add") 47 public String add(SalesForm form,BindingResult result, Model model,HttpServletRequest request) { 48 Item item = RecordManager.findItem(form.getGoodsName()); 49 RecordManager.setNewItem(new Item(item.getId(), form.getGoodsName(), item.getPrice(), form.getQuantity(), item.getSubtotal())); 50 Item newItem = RecordManager.getNewItem(); 51 int sb = newItem.getPrice() * newItem.getQuantity(); 52 newItem.setSubtotal(sb); 53 model.addAttribute("nameList", RecordManager.makeNameList()); 54 model.addAttribute("allList", RecordManager.getallList()); 55 if (result.hasErrors() || 1 > form.getQuantity() || form.getQuantity() > 100) { 56 model.addAttribute("total", RecordManager.calTotal(RecordManager.getallList())); 57 model.addAttribute("message", ERRMSG); 58 return "add"; 59 60 } else { 61 RecordManager.addToAllList(newItem); 62 model.addAttribute("total", RecordManager.calTotal(RecordManager.getallList())); 63 model.addAttribute("message2", ADDMSG); 64 return "add"; 65 } 66 //model.removeAttribute("SalesForm"); 67 //HttpSession session = request.getSession(true); 68 } 69 70 /** 71 * 細追加画面から呼ばれる。選択した商品を削除し明細追加画面を表示する。 72 * @param form フォームオブジェクト 73 * @param model モデルオブジェクト 74 * @return Viewとしてadd.jspを指定 75 */ 76 @RequestMapping(params = "remove") 77 public String remove(SalesForm form, BindingResult result, Model model, HttpServletRequest request) { 78 String num = request.getParameter("radio"); 79 if (num == null) { 80 model.addAttribute("message5", ERRMSG2); 81 model.addAttribute("total", RecordManager.calTotal(RecordManager.getallList())); 82 model.addAttribute("nameList", RecordManager.makeNameList()); 83 model.addAttribute("allList", RecordManager.getallList()); 84 return "add"; 85 } 86 87 int number = Integer.parseInt(num); 88 RecordManager.removeToAllList(number); 89 model.addAttribute("message4", DELETE); 90 model.addAttribute("total", RecordManager.calTotal(RecordManager.getallList())); 91 model.addAttribute("nameList", RecordManager.makeNameList()); 92 model.addAttribute("allList", RecordManager.getallList()); 93 94 if(RecordManager.calTotal(RecordManager.getallList()) == 0){ 95 return "init"; 96 } 97 98 return "add"; 99 } 100 101 /** 102 * 確認画面で登録を押した時に呼ばれる。データを登録して初期画面表示へ遷移する。 103 * @param form フォームオブジェクト 104 * @param model モデルオブジェクト 105 * @return initメソッドへのリンクを指定 106 */ 107 @RequestMapping(params = "firm") 108 public String firm(SalesForm form, Model model) { 109 long value = System.currentTimeMillis(); 110 Item item = RecordManager.findItem(form.getGoodsName()); 111 RecordManager.setNewItem(new Item(item.getId(), form.getGoodsName(), item.getPrice(), form.getQuantity(), item.getSubtotal())); 112 Item newItem = RecordManager.getNewItem(); 113 int sb = newItem.getPrice() * newItem.getQuantity(); 114 newItem.setSubtotal(sb); 115 model.addAttribute("salesid", value); 116 model.addAttribute("message3", FIXMSG); 117 model.addAttribute("total", RecordManager.calTotal(RecordManager.getallList())); 118 model.addAttribute("nameList", RecordManager.makeNameList()); 119 model.addAttribute("allList", RecordManager.getallList()); 120 return "fix"; 121 } 122}
add.jsp
jsp
1<%@ page session="false" language="java" 2 contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 3<%@page import="java.time.format.DateTimeFormatter"%> 4<%@ page import="java.time.LocalDate"%> 5<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 6<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 7<%@ page import="java.util.*"%> 8<%@ page import="java.time.*"%> 9<!DOCTYPE html> 10<html> 11<head> 12<link rel="stylesheet" type="text/css" 13 href="/sales/resources/css/common.css" /> 14<title>明細追加画面</title> 15</head> 16<body> 17 <form:form modelAttribute="salesForm" action="/sales/system" var="list"> 18 <div class="header"> 19 <span class="titleName">オンラインショップ</span> 20 <% 21 DateTimeFormatter format = DateTimeFormatter.ofPattern("MM月dd日(E)"); 22 %> 23 <span class="date"><%=format.format(LocalDate.now())%></span> 24 </div> 25 <div class="main"></div> 26 <div>明細追加画面</div> 27 商品: 28 <form:select path="goodsName" items="${nameList}" /> 29 <div> 30 点数: 31 <form:input path="quantity" items="${allList}" /> 32 </div> 33 <div> 34 <input type="submit" name="add" value="明細追加" /> 35 </div> 36 <div class="message"> 37 <font color="#ff0000"> <c:out value="${message}" /></font> <font 38 color="#1e90ff"> <c:out value="${message2}" /> 39 </font> <font color="#1e90ff"> <c:out value="${message4}" /> 40 </font><font color="#1e90ff"> <c:out value="${message5}" /> 41 </font> 42 </div> 43 44 <table border="1"> 45 <tr> 46 <th>削除</th> 47 <th>商品ID</th> 48 <th>商品名</th> 49 <th>単価</th> 50 <th>点数</th> 51 <th>小計</th> 52 </tr> 53 <c:forEach items="${allList}" var="item" varStatus="status"> 54 <tr class="even"> 55 <form:hidden path="quantity" /> 56 <td><input type="radio" name="radio" value="${status.index}" /></td> 57 <td><c:out value="${item.id}" /></td> 58 <td><c:out value="${item.name}" /></td> 59 <td><c:out value="${item.price}" /></td> 60 <td><c:out value="${item.quantity}" /></td> 61 <td><c:out value="${item.subtotal}" /></td> 62 </tr> 63 </c:forEach> 64 </table> 65 <div> 66 合計: 67 <c:out value="${total}" /> 68 円 69 </div> 70 <input type="submit" name="firm" value="確定" /> 71 <input type="submit" name="remove" value="削除" /> 72 </form:form> 73</body> 74</html>
init.jsp
jsp
1<%@ page session="false" language="java" 2 contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 3<%@page import="java.time.format.DateTimeFormatter"%> 4<%@ page import="java.time.LocalDate"%> 5<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 6<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 7<%@ page import="java.util.*"%> 8<%@ page import="java.time.*"%> 9<!DOCTYPE html> 10<html> 11<head> 12<link rel="stylesheet" type="text/css" 13 href="/sales/resources/css/common.css" /> 14<title>売上システム(初期画面)</title> 15</head> 16<body> 17 <form:form modelAttribute="salesForm" action="/sales/system" var="list"> 18 <div class="header"> 19 <span class="titleName">オンラインショップ</span> 20 <% 21 DateTimeFormatter format = DateTimeFormatter.ofPattern("MM月dd日(E)"); 22 %> 23 <span class="date"><%=format.format(LocalDate.now())%></span> 24 </div> 25 <div class="main"></div> 26 <div>初期画面</div> 27 商品: 28 <form:select path="goodsName" items="${nameList}" /> 29 <div> 30 点数: 31 <form:input path="quantity" items="${allList}" /> 32 </div> 33 <input type="submit" name="add" value="明細追加" /> 34 </form:form> 35</body> 36</html>