前提・実現したいこと
削除のラジオボタンを押下しないで削除ボタンを押下すると「明細行を選択してください」と出力したい。
自分の考えではSalesSystemControllerのelse if文の条件が拾えていないと思っていますが、int型のdelnumberが選択されいない状態を表す条件式が思いつきません。
よろしくお願いします。
![]
発生している問題・エラーメッセージ
HTTPステータス 500
HTTPステータス 500 - Internal Server Error Type Exception Report メッセージ Request processing failed; nested exception is java.lang.ArrayIndexOutOfBoundsException: -1 説明 The server encountered an unexpected condition that prevented it from fulfilling the request.
SalesSystemController.java
@RequestMapping(params = "remove") public String remove(SalesForm form, Model model, SessionStatus sessionStatus) { model.addAttribute("salesForm", form); model.addAttribute("salesList", RecordManager.getList()); if (form.getAllList().size() > 0) { if (form.getDelNumber() >= 0) { form.getAllList().remove(form.getDelNumber()-1); model.addAttribute("salesForm", form); model.addAttribute("message", "選択された明細行を削除しました。"); model.addAttribute("messageClass", "addMessage"); form.setDelNumber(0); model.addAttribute("goodsList", form.getAllList()); } else if (form.getDelNumber() == -1){ model.addAttribute("salesForm", form); model.addAttribute("goodsList", form.getAllList()); model.addAttribute("message", "明細行を選択してください。"); model.addAttribute("messageClass", "errorMessage"); } int total = 0; for (Item goods : form.getAllList()) { total += goods.getSubtotal(); } model.addAttribute("total", total); //選択された商品がない場合、初期画面に戻る if (form.getAllList().isEmpty()) { return "init"; } return "add"; }
SalesForm.java
public class SalesForm { /** * goodsName */ private String goodsName; /** * point */ private String point; /** * delNumber */ private int delNumber; private ArrayList<Item> allList = new ArrayList<Item>(); /** * @return delNumber */ public int getDelNumber() { return delNumber; } /** * @param pDelNumber セットする delNumber * @return */ public int setDelNumber(int pDelNumber) { return this.delNumber = pDelNumber; } /** * @return goodsName */ public String getGoodsName() { return goodsName; } /** * @param pGoodsName セットする goodsName */ public void setGoodsName(String pGoodsName) { this.goodsName = pGoodsName; } /** * @return point */ public String getPoint() { return point; } /** * @param pPoint セットする point */ public void setPoint(String pPoint) { this.point = pPoint; } public ArrayList<Item> getAllList() { return allList; } public void addToAllList(Item goods) { allList.add(goods); } }
RecordManager.java
/** 商品データ */ private static List<Item> list = new ArrayList<Item>(); static { list.add(new Item("A00101", "油性ボールペン", 60, 0, 0)); list.add(new Item("A00201", "極細ボールペン", 120, 0, 0)); list.add(new Item("A00301", "蛍光ペン6色セット", 420, 0, 0)); list.add(new Item("A00401", "シャープペンシル", 100, 0, 0)); list.add(new Item("A00501", "鉛筆H(1ダース)", 400, 0, 0)); list.add(new Item("B00101", "無線綴ノートA4", 100, 0, 0)); list.add(new Item("B00201", "リングノートA4", 120, 0, 0)); list.add(new Item("B00301", "領収書", 350, 0, 0)); list.add(new Item("C00101", "はさみ(青)", 128, 0, 0)); list.add(new Item("C00201", "ステープラー", 338, 0, 0)); list.add(new Item("C00301", "2穴パンチ", 128, 0, 0)); list.add(new Item("C00401", "ゼムクリップ", 98, 0, 0)); list.add(new Item("C00501", "消しゴム", 58, 0, 0)); } /** * 引数で指定された商品名に一致する商品データを返却 * @param goodsName 検索キーとなる商品名 * @return 検索結果の商品データ */ public static Item findItem(String goodsName) { int index = list.indexOf(new Item("", goodsName, 0,0,0)); return list.get(index); } /** * * @return list */ public static List<Item> getList(){ return list; }
add.jsp
<c:forEach items="${goodsList}" var="item" step="1" varStatus="status">
<tr>
<td><form:radiobutton path="delNumber" value="${status.count}" /></td>
<td>${item.id}</td>
<td>${item.name}</td>
<td>${item.price}</td>
<td>${item.quantity}</td>
<td>${item.subtotal}</td>
</tr>
</c:forEach>
</table>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。