前提・実現したいこと
サーブレットでショッピングカート風の機能を作っています。
商品一覧画面にて、注文個数を入力していなかったらエラーメッセージを出したいです。
ステータス500にいくのではなく、エラー文字付の前画面に遷移したいです。(説明画像あり)
input値が在庫を超えているとエラーメッセージを出す、という内容はできているので、それに類似して作ろうとしているのですがうまくいきません
該当のソースコード
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); //注文個数のパラメーター取得 String[] values=req.getParameterValues("number"); //これがうまくいきません↓ if(values == null) { req.setAttribute("stockErrorMsg2", "空欄はだめです"); //productsは、遷移前のプログラムでスコープに保存した商品リストです req.setAttribute("products", list); RequestDispatcher rd = req.getRequestDispatcher("/WEB-INF/list.jsp"); rd.forward(req, res); } //商品ごとの注文個数リスト List<Number> no = new ArrayList<Number>(); for(int i=0;i<values.length;i++) { int number = Integer.parseInt(values[i]); no.add(new Number(number)); } try { //DB接続 ConnectionDb db = new ConnectionDb(); db.conn(); //入力値を含めたリストを作る List<Stock> list = new ArrayList<Stock>(); String query = "SELECT S.ITEM_ID,ITEM_NAME,STOCK,PRICE " + "FROM PRODUCT_NAME AS N " + "JOIN PRODUCT_STOCK AS S " + "ON N.ITEM_ID = S.ITEM_ID " + "JOIN PRODUCT_PRICE AS P " + "ON S.ITEM_ID = P.ITEM_ID "; PreparedStatement stmt = db.con.prepareStatement(query); ResultSet rs = stmt.executeQuery(); int counter = 0; while (rs.next()) { String itemName = rs.getString("ITEM_NAME"); int price = rs.getInt("PRICE"); int stock = rs.getInt("STOCK"); String itemId = rs.getString("ITEM_ID"); Number numbr = no.get(counter); list.add(new Stock(stock,itemName,price,itemId,numbr)); counter++; } req.setAttribute("stocks", list); //在庫を超える入力があった時点でループを終了(入力値がマイナスの時も追加) boolean isShortage = false; for(int i=0; i < list.size(); i++) { if( list.get(i).getStock() < Integer.parseInt(values[i]) || Integer.parseInt(values[i]) < 0){ isShortage = true; break; } } if(isShortage) {//在庫切れの時に、true //これはうまくいっています!!↓ req.setAttribute("stockErrorMsg", "在庫がありません"); req.setAttribute("products", list); RequestDispatcher rd = req.getRequestDispatcher("/WEB-INF/list.jsp"); rd.forward(req, res); } else { RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/stockOK.jsp"); dispatcher.forward(req, res); rs.close(); stmt.close(); } catch (SQLException e) { e.printStackTrace(); } }
###発生するエラー
- req.getAttribute("products",list)の「listを変数に解決できません」というエラー
試したこと
回答1件
あなたの回答
tips
プレビュー