teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

コード修正

2020/05/22 02:48

投稿

poporian_a
poporian_a

スコア8

title CHANGED
File without changes
body CHANGED
@@ -18,7 +18,6 @@
18
18
 
19
19
  //注文個数のパラメーター取得
20
20
  String[] values=req.getParameterValues("number");
21
- }
22
21
 
23
22
        //これがうまくいきません↓
24
23
  if(values == null) {

3

誤字修正

2020/05/22 02:48

投稿

poporian_a
poporian_a

スコア8

title CHANGED
File without changes
body CHANGED
@@ -4,7 +4,7 @@
4
4
  商品一覧画面にて、注文個数を入力していなかったらエラーメッセージを出したいです。
5
5
  ステータス500にいくのではなく、エラー文字付の前画面に遷移したいです。(説明画像あり)
6
6
 
7
- input値が在庫を超えているとエラーメッセージを出す、という内容はできているので、それに類似して作ろうとしているのですがうまくいきません
7
+ input値が在庫を超えているとエラーメッセージを出す、という内容はできているので、それに類似して作ろうとしているのですがうまくいきません
8
8
 
9
9
  ### 該当のソースコード
10
10
 

2

誤字修正

2020/05/22 02:47

投稿

poporian_a
poporian_a

スコア8

title CHANGED
File without changes
body CHANGED
@@ -4,7 +4,7 @@
4
4
  商品一覧画面にて、注文個数を入力していなかったらエラーメッセージを出したいです。
5
5
  ステータス500にいくのではなく、エラー文字付の前画面に遷移したいです。(説明画像あり)
6
6
 
7
- input値が在庫を超えているとエラーメッセージを出す、という内容はできているので、それに類似してる苦労としているのですがうまくいきません
7
+ input値が在庫を超えているとエラーメッセージを出す、という内容はできているので、それに類似してる作ろうとしているのですがうまくいきません
8
8
 
9
9
  ### 該当のソースコード
10
10
 

1

質問文の修正

2020/05/22 02:46

投稿

poporian_a
poporian_a

スコア8

title CHANGED
File without changes
body CHANGED
@@ -4,39 +4,104 @@
4
4
  商品一覧画面にて、注文個数を入力していなかったらエラーメッセージを出したいです。
5
5
  ステータス500にいくのではなく、エラー文字付の前画面に遷移したいです。(説明画像あり)
6
6
 
7
+ input値が在庫を超えているとエラーメッセージを出す、という内容はできているので、それに類似してる苦労としているのですがうまくいきません
8
+
7
9
  ### 該当のソースコード
8
10
 
9
11
  ```ここに言語名を入力
10
- @WebServlet("/StockServlet")
11
- public class StockServlet extends HttpServlet {
12
- private static final long serialVersionUID = 1L;
13
-
14
- protected void doPost(HttpServletRequest req,
12
+ protected void doPost(HttpServletRequest req,
15
13
  HttpServletResponse res)
16
14
  throws ServletException, IOException {
17
15
 
18
16
 
19
17
  req.setCharacterEncoding("UTF-8");
20
18
 
21
- //入力された注文個数取得
19
+ //注文個数のパラメーター取得
22
20
  String[] values=req.getParameterValues("number");
21
+ }
23
22
 
24
- //リクエストパラメーターをチェック
23
+       //これがうまくいきません↓
25
- if(values == null){
24
+ if(values == null) {
26
- req.setAttribute("nullErrorMsg", "空欄はだめです");
25
+ req.setAttribute("stockErrorMsg2", "空欄はだめです");
27
-     //遷移前に商品リストをreq.setAttribute("products", list);という形保存していました
26
+       //productsは、遷移前のプログラムでスコープ保存した商品リストで
28
-        req.getAttribute("products",list);
27
+ req.setAttribute("products", list);
29
- RequestDispatcher rd = req.getRequestDispatcher("/WEB-INF/list.jsp");
28
+ RequestDispatcher rd = req.getRequestDispatcher("/WEB-INF/list.jsp");
30
- rd.forward(req, res);
29
+ rd.forward(req, res);
31
-   }
30
+ }
31
+
32
+   //商品ごとの注文個数リスト
33
+ List<Number> no = new ArrayList<Number>();
34
+ for(int i=0;i<values.length;i++)
35
+ {
36
+ int number = Integer.parseInt(values[i]);
37
+ no.add(new Number(number));
38
+ }
39
+
40
+ try {
41
+
42
+ //DB接続
43
+ ConnectionDb db = new ConnectionDb();
44
+ db.conn();
45
+
46
+ //入力値を含めたリストを作る
47
+ List<Stock> list = new ArrayList<Stock>();
48
+
49
+ String query = "SELECT S.ITEM_ID,ITEM_NAME,STOCK,PRICE "
50
+ + "FROM PRODUCT_NAME AS N "
51
+ + "JOIN PRODUCT_STOCK AS S "
52
+ + "ON N.ITEM_ID = S.ITEM_ID "
53
+ + "JOIN PRODUCT_PRICE AS P "
54
+ + "ON S.ITEM_ID = P.ITEM_ID ";
55
+ PreparedStatement stmt = db.con.prepareStatement(query);
56
+ ResultSet rs = stmt.executeQuery();
57
+
58
+ int counter = 0;
59
+ while (rs.next()) {
60
+ String itemName = rs.getString("ITEM_NAME");
61
+ int price = rs.getInt("PRICE");
62
+ int stock = rs.getInt("STOCK");
63
+ String itemId = rs.getString("ITEM_ID");
64
+ Number numbr = no.get(counter);
65
+ list.add(new Stock(stock,itemName,price,itemId,numbr));
66
+ counter++;
67
+ }
68
+
69
+ req.setAttribute("stocks", list);
70
+
71
+ //在庫を超える入力があった時点でループを終了(入力値がマイナスの時も追加)
72
+ boolean isShortage = false;
73
+ for(int i=0; i < list.size(); i++) {
74
+ if( list.get(i).getStock() < Integer.parseInt(values[i])
75
+ || Integer.parseInt(values[i]) < 0){
76
+ isShortage = true;
77
+ break;
78
+ }
79
+ }
80
+
81
+ if(isShortage) {//在庫切れの時に、true
82
+         //これはうまくいっています!!↓
83
+ req.setAttribute("stockErrorMsg", "在庫がありません");
84
+ req.setAttribute("products", list);
85
+ RequestDispatcher rd = req.getRequestDispatcher("/WEB-INF/list.jsp");
86
+ rd.forward(req, res);
87
+ } else {
88
+ RequestDispatcher dispatcher =
89
+ req.getRequestDispatcher("/WEB-INF/stockOK.jsp");
90
+ dispatcher.forward(req, res);
91
+
92
+ rs.close();
93
+ stmt.close();
94
+
95
+ } catch (SQLException e) {
96
+ e.printStackTrace();
97
+ }
98
+ }
32
99
  ```
33
100
  ###発生するエラー
34
101
  - req.getAttribute("products",list)の「listを変数に解決できません」というエラー
35
- - 画面チェックをするとHTTPステータス 500 - For input string: ""の画面
36
102
  ### 試したこと
103
+ - 単語でネット検索
37
- https://teratail.com/questions/21114
104
+ - https://teratail.com/questions/21114を参考にしたりしました。
38
- を参考にしたりしました。
39
105
 
40
-
41
106
  ###画像イメージ
42
107
  ![イメージ説明](3a4193ae93d878a91245bec78e1aa3f0.png)。