以下のadd.jspではプルダウンで商品名を選択し、明細追加ボタンを押すとリストで1行ずつ追加していくのですが、2つ目以降の商品を選択すると、2つ目以降で選択した商品データでそこから上のデータも上書きされてリストだけが追加されていきます。
実装したいのは、2つ目以降を選択してもそれより上のリストを保持しつつ追加していきたいのですが、どうしたら良いかわからないので、教えて頂きたいです。
実行例
商品ID 商品名 単価 点数 小計
A00101 油性ボールペン 60 0 0
A00101 油性ボールペン 60 0 0
A00101 油性ボールペン 60 0 0
↓(プルダウンで蛍光ペン6色セットを選択して明細追加ボタン押下)
商品ID 商品名 単価 点数 小計
A00301 蛍光ペン6色セット 420 0 0
A00301 蛍光ペン6色セット 420 0 0
A00301 蛍光ペン6色セット 420 0 0
A00301 蛍光ペン6色セット 420 0 0
add.jsp
jsp
1<%@ page session="false" language="java" 2 contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 3<%@ page import="java.time.LocalDate"%> 4<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 5<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 6<!DOCTYPE html> 7<html> 8<head> 9<link rel="stylesheet" type="text/css" 10 href="/sales/resources/css/common.css" /> 11<title>売上システム(初期画面)</title> 12</head> 13<body> 14 <form:form modelAttribute="salesForm" action="/sales/system" var="list"> 15 <div class="header"> 16 <span class="titleName">内徳オンラインショップ</span> 17 <div class="date"><%=LocalDate.now()%></div> 18 </div> 19 <div class="main"></div> 20 <div>明細追加画面</div> 21 <div> 22 <form:select path="goodsName" items="${nameList}" /> 23 <table> 24 <tr> 25 <th>商品ID</th> 26 <th>商品名</th> 27 <th>単価</th> 28 <th>点数</th> 29 <th>小計</th> 30 </tr> 31 <c:forEach items="${allList}" var="item" varStatus="status"> 32 <tr class="even"> 33 <td>${salesForm.id}</td> 34 <td>${salesForm.goodsName}</td> 35 <td>${salesForm.price}</td> 36 <td>${salesForm.quantity}</td> 37 <td>${salesForm.subtotal}</td> 38 </tr> 39 </c:forEach> 40 </table> 41<%-- 42 <div><span>商品ID</span><span> 商品名 </span><span> 単価 </span><span> 点数 </span><span> 小計 </span></div> 43 <c:out value="${salesForm.id}" /> 44 <c:out value="${salesForm.goodsName}" /> 45 <c:out value="${salesForm.allList}" /> --%> 46 <div> 47 <input type="submit" name="add" value="明細追加" /> 48 </div> 49 <input type="submit" name="toInit" value="確定" /> 50 </div> 51 </form:form> 52</body> 53</html>
SalesSystemController.java
java
1package jp.practice.sales; 2 3import org.springframework.stereotype.Controller; 4import org.springframework.ui.Model; 5import org.springframework.web.bind.annotation.RequestMapping; 6import org.springframework.web.bind.annotation.SessionAttributes; 7 8 9@Controller 10@RequestMapping(value = "/system") 11@SessionAttributes 12public class SalesSystemController { 13 14 15 16 /** 17 * 初期画面から呼ばれる。選択した商品の明細追加画面を表示する。 18 * @param form フォームオブジェクト 19 * @param model モデルオブジェクト 20 * @return Viewとしてadd.jspを指定 21 */ 22 @RequestMapping(params = "add") 23 public String add(SalesForm form, Model model) { 24 Item item = RecordManager.selectItem(form.getGoodsName()); 25 RecordManager.findItem(form.getGoodsName()); 26 form.setId(item.getId()); 27 form.setGoodsName(item.getName()); 28 form.setPrice(item.getPrice()); 29 form.setQuantity(item.getQuantity()); 30 form.setSubtotal(item.getSubtotal()); 31 32 RecordManager.addToAllList(item); 33 model.addAttribute("nameList", RecordManager.makeNameList()); 34 model.addAttribute("allList", RecordManager.getallList()); 35 36 return "add"; 37 } 38 39 } 40}
SalesForm.java
java
1package jp.practice.sales; 2 3import java.util.ArrayList; 4import java.util.List; 5 6public class SalesForm { 7 8 /** 商品ID */ 9 private String id; 10 /** 商品名 */ 11 private String goodsName; 12 /** 単価 */ 13 private int price; 14 /** 売上点数 */ 15 private int quantity; 16 /** 小景 */ 17 private int subtotal; 18 /** 商品点数 */ 19 private int point; 20 /** 削除番号 */ 21 private int delNumber; 22 23 List<Item> allList = new ArrayList<>(); 24 25 public SalesForm() { 26 27 } 28 /** 29 * @return id 30 */ 31 public String getId() { 32 return id; 33 } 34 35 /** 36 * @param id セットする id 37 */ 38 public void setId(String id) { 39 this.id = id; 40 } 41 /** 42 * @return price 43 */ 44 public int getPrice() { 45 return price; 46 } 47 48 /** 49 * @param price セットする price 50 */ 51 public void setPrice(int price) { 52 this.price = price; 53 } 54 55 /** 56 * @return quantity 57 */ 58 public int getQuantity() { 59 return quantity; 60 } 61 62 /** 63 * @param quantity セットする quantity 64 */ 65 public void setQuantity(int quantity) { 66 this.quantity = quantity; 67 } 68 69 /** 70 * @return subtotal 71 */ 72 public int getSubtotal() { 73 return subtotal; 74 } 75 76 public void setSubtotal(int subtotal) { 77 this.subtotal = subtotal; 78 } 79 80 81 82 /** 83 * @return goodsName 84 */ 85 public String getGoodsName() { 86 return goodsName; 87 } 88 89 /** 90 * @param goodsName セットする goodsName 91 */ 92 public void setGoodsName(String goodsName) { 93 this.goodsName = goodsName; 94 } 95 96 /** 97 * @return point 98 */ 99 public int getPoint() { 100 return point; 101 } 102 103 /** 104 * @param point セットする point 105 */ 106 public void setPoint(int point) { 107 this.point = point; 108 } 109 110 /** 111 * @return delNumber 112 */ 113 public int getDelNumber() { 114 return delNumber; 115 } 116 117 /** 118 * @param delNumber セットする delNumber 119 */ 120 public void setDelNumber(int delNumber) { 121 this.delNumber = delNumber; 122 } 123 124 /** 125 * @return allList 126 */ 127 public List<Item> getAllList() { 128 return allList; 129 } 130 131}
RecordManager.java
java
1package jp.practice.sales; 2 3import java.util.ArrayList; 4import java.util.List; 5 6/** 7 * 商品データ全体を保持するクラス 8 */ 9public final class RecordManager { 10 11 /** 明細データ */ 12 static List<Item> allList = new ArrayList<>(); 13 14 15 16 /** 商品データ */ 17 private static final List<Item> list = new ArrayList<Item>(); 18 static { 19 list.add(new Item("A00101", "油性ボールペン", 60, 0, 0)); 20 list.add(new Item("A00201", "極細ボールペン", 120, 0, 0)); 21 list.add(new Item("A00301", "蛍光ペン6色セット", 420, 0, 0)); 22 list.add(new Item("A00401", "シャープペンシル", 100, 0, 0)); 23 list.add(new Item("A00501", "鉛筆H(1ダース)", 400, 0, 0)); 24 list.add(new Item("B00101", "無線綴ノートA4", 100, 0, 0)); 25 list.add(new Item("B00201", "リングノートA4", 120, 0, 0)); 26 list.add(new Item("B00301", "領収書", 350, 0, 0)); 27 list.add(new Item("C00101", "はさみ(青)", 128, 0, 0)); 28 list.add(new Item("C00201", "ステープラー", 338, 0, 0)); 29 list.add(new Item("C00301", "2穴パンチ", 128, 0, 0)); 30 list.add(new Item("C00401", "ゼムクリップ", 98, 0, 0)); 31 list.add(new Item("C00501", "消しゴム", 58, 0, 0)); 32 } 33 34 /** 35 * 引数で指定された商品名に一致する商品データを返却 36 * @param name 検索キーとなる商品名 37 * @return 検索結果の商品データ 38 */ 39 public static Item findItem(String goodsName) { 40 int index = list.indexOf(new Item("", goodsName, 0,0,0)); 41 return list.get(index); 42 } 43 44 /** 45 * 商品データを返す。 46 * @return 商品データ 47 */ 48 public static List<Item> getNameist() { 49 return list; 50 } 51 52 /** 53 * 明細データを返す。 54 * @return 明細データ 55 */ 56 public static List<Item> getallList() { 57 return allList; 58 } 59 60 /** 61 * リストに商品情報を 1 件追加する 62 */ 63 public static void addToAllList(Item newItem) { 64 allList.add(newItem); 65 } 66 67 /** 68 * 全員の名前のリストを返す。 69 * @return 名前の配列 70 */ 71 public static String[] makeNameList() { 72 String[] nameList = new String[list.size()]; 73 for (int i = 0; i < list.size(); i++) { 74 nameList[i] = (list.get(i)).getName(); 75 } 76 return nameList; 77 } 78 79 /** 80 * 名前で検索し、その商品のデータを返す。 81 * @param name 商品名 82 * @return 一商品データ 83 */ 84 public static Item selectItem(String name) { 85 86 for(Item item:list) { 87 if (item.getName().equals(name)) { 88 return item; 89 } 90 } 91 return null; 92 } 93}
Item.java
java
1package jp.practice.sales; 2 3public class Item { 4 5 /** 商品ID */ 6 private String id; 7 /** 商品名 */ 8 private String name; 9 /** 単価 */ 10 private int price; 11 /** 売上点数 */ 12 private int quantity; 13 /** 小景 */ 14 private int subtotal; 15 16 public Item(String id, String name, int price, int quantity, int subtotal) { 17 this.id = id; 18 this.name = name; 19 this.price = price; 20 this.quantity = quantity; 21 this.subtotal = subtotal; 22 } 23 24 /** 25 * @return id 26 */ 27 public String getId() { 28 return id; 29 } 30 31 /** 32 * @param id セットする id 33 */ 34 public void setId(String id) { 35 this.id = id; 36 } 37 38 /** 39 * @return name 40 */ 41 public String getName() { 42 return name; 43 } 44 45 /** 46 * @param name セットする name 47 */ 48 public void setName(String name) { 49 this.name = name; 50 } 51 52 /** 53 * @return price 54 */ 55 public int getPrice() { 56 return price; 57 } 58 59 /** 60 * @param price セットする price 61 */ 62 public void setPrice(int price) { 63 this.price = price; 64 } 65 66 /** 67 * @return quantity 68 */ 69 public int getQuantity() { 70 return quantity; 71 } 72 73 /** 74 * @param quantity セットする quantity 75 */ 76 public void setQuantity(int quantity) { 77 this.quantity = quantity; 78 } 79 80 public int getSubtotal() { 81 return subtotal; 82 } 83 84 85 86 87 public void setSubtotal(int subtotal) { 88 this.subtotal = subtotal; 89 } 90 91 @Override 92 public int hashCode() { 93 final int prime = 31; 94 int result = 1; 95 result = prime * result + ((name == null) ? 0 : name.hashCode()); 96 return result; 97 } 98 99 @Override 100 public boolean equals(Object obj) { 101 if (this == obj) { 102 return true; 103 } 104 if (obj == null) { 105 return false; 106 } 107 if (!(obj instanceof Item)) { 108 return false; 109 } 110 Item other = (Item) obj; 111 if (name == null) { 112 if (other.name != null) { 113 return false; 114 } 115 } else if (!name.equals(other.name)) { 116 return false; 117 } 118 return true; 119 } 120}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/28 09:04