前提・実現したいこと
オンラインショップの機能を作成していますが、プールダウンから商品を選び、数量を入力したら明細追加画面が表示されるような仕組みです。商品を追加すると、画面上のリストがどんどん更新されます。
###問題
仕様書では、「選択した商品の一覧を格納する売上明細リストallList を定義する。このリストはFormクラスにItem を要素として持つ非static なArrayList として実装する。さらにForm クラスにリストのゲッターgetAllList メソッドとリストに商品情報を1 件追加するaddToAllList メソッドを作る。」と書かれています。
私の理解では、選択された商品の名前をFormクラスから取得、itemを生成し、addToAllListメソッドを使ってallListの中に格納します。そしてcontrollerからgetAllListを呼び出し、選択された商品リストを表示します。
該当のソースコード
**Controller** @RequestMapping(params = "add") public String add(SalesForm form, Model model) { Item item = RecordManager.findItem(form.getGoodsName()); model.addAttribute("item",form.getAllList()); form.getGoodsName(); form.setPoint(form.getPoint()); model.addAttribute("nameList", RecordManager.makeNameList()); return "add"; } **SalesForm** public class SalesForm { //プルダウンリストから選択された商品名 private String goodsName; //入力する点数 private int point; private int delNumber; //ここでgetterとsetterを省略 private List<Item> allList = new ArrayList<Item>(); public List<Item> getAllList() { return allList; } public void addToAllList(Item item){ this.allList.add(item); } } **RecordManager** private static final List<Item> list = new ArrayList<Item>(); static { list.add(new Item("A00101", "油性ボールペン", 60, 0, 0)); //以下のリストを省略 } public static Item findItem(String name) { int index = list.indexOf(new Item("", name, 0,0,0)); return list.get(index); } public static String[] makeNameList() { String[] nameList = new String[list.size()]; for (int i = 0; i < list.size(); i++) { nameList[i] = (list.get(i)).getName(); } return nameList; } **item** private String id; private String name; private int price; private int quantity; private int subtotal; //ここでgetterとsetterを省略 **add.jsp** <table class="table"> <tr><th>削除</th> <th>商品ID</th> <th>商品名</th> <th>単価</th> <th>点数</th> <th>小計</th> </tr> <c:forEach items="${allList}" var="item" varStatus="status"> <tr> <td><input type="radio" name="radio"></td> <td>${item.id }</td> <td>${item.name }</td> <td>${item.price }</td> <td>${item.quantity }</td> <td>${item.subtotal }</td> </tr> </c:forEach>
試したこと
このようにしたら、選択された商品が画面に渡すことができませんでした。
一応SpringMVC 複数のフォームオブジェクトにバインドする方法 を参考しましたが、うまくできなかったです。
どなたかぜひ知恵を貸してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/21 06:31