質問編集履歴

4

コード修正

2020/05/22 02:48

投稿

poporian_a
poporian_a

スコア8

test CHANGED
File without changes
test CHANGED
@@ -38,8 +38,6 @@
38
38
 
39
39
  String[] values=req.getParameterValues("number");
40
40
 
41
- }
42
-
43
41
 
44
42
 
45
43
        //これがうまくいきません↓

3

誤字修正

2020/05/22 02:48

投稿

poporian_a
poporian_a

スコア8

test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- input値が在庫を超えているとエラーメッセージを出す、という内容はできているので、それに類似して作ろうとしているのですがうまくいきません
13
+ input値が在庫を超えているとエラーメッセージを出す、という内容はできているので、それに類似して作ろうとしているのですがうまくいきません
14
14
 
15
15
 
16
16
 

2

誤字修正

2020/05/22 02:47

投稿

poporian_a
poporian_a

スコア8

test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- input値が在庫を超えているとエラーメッセージを出す、という内容はできているので、それに類似してる苦労としているのですがうまくいきません
13
+ input値が在庫を超えているとエラーメッセージを出す、という内容はできているので、それに類似してる作ろうとしているのですがうまくいきません
14
14
 
15
15
 
16
16
 

1

質問文の修正

2020/05/22 02:46

投稿

poporian_a
poporian_a

スコア8

test CHANGED
File without changes
test CHANGED
@@ -10,21 +10,17 @@
10
10
 
11
11
 
12
12
 
13
+ input値が在庫を超えているとエラーメッセージを出す、という内容はできているので、それに類似してる苦労としているのですがうまくいきません
14
+
15
+
16
+
13
17
  ### 該当のソースコード
14
18
 
15
19
 
16
20
 
17
21
  ```ここに言語名を入力
18
22
 
19
- @WebServlet("/StockServlet")
20
-
21
- public class StockServlet extends HttpServlet {
22
-
23
- private static final long serialVersionUID = 1L;
24
-
25
-
26
-
27
- protected void doPost(HttpServletRequest req,
23
+ protected void doPost(HttpServletRequest req,
28
24
 
29
25
  HttpServletResponse res)
30
26
 
@@ -38,27 +34,165 @@
38
34
 
39
35
 
40
36
 
41
- //入力された注文個数取得
37
+ //注文個数のパラメーター取得
42
38
 
43
39
  String[] values=req.getParameterValues("number");
44
40
 
45
-
46
-
47
- //リクエストパラメーターをチェック
48
-
49
- if(values == null){
50
-
51
- req.setAttribute("nullErrorMsg", "空欄はだめです");
52
-
53
-     //遷移前に商品リストをreq.setAttribute("products", list);という形で保存していました
54
-
55
-        req.getAttribute("products",list);
56
-
57
- RequestDispatcher rd = req.getRequestDispatcher("/WEB-INF/list.jsp");
58
-
59
- rd.forward(req, res);
60
-
61
-   }
41
+ }
42
+
43
+
44
+
45
+       //これがうまくいきません↓
46
+
47
+ if(values == null) {
48
+
49
+ req.setAttribute("stockErrorMsg2", "空欄はだめです");
50
+
51
+       //productsは、遷移前のプログラムでスコープに保存した商品リストです
52
+
53
+ req.setAttribute("products", list);
54
+
55
+ RequestDispatcher rd = req.getRequestDispatcher("/WEB-INF/list.jsp");
56
+
57
+ rd.forward(req, res);
58
+
59
+ }
60
+
61
+
62
+
63
+   //商品ごとの注文個数リスト
64
+
65
+ List<Number> no = new ArrayList<Number>();
66
+
67
+ for(int i=0;i<values.length;i++)
68
+
69
+ {
70
+
71
+ int number = Integer.parseInt(values[i]);
72
+
73
+ no.add(new Number(number));
74
+
75
+ }
76
+
77
+
78
+
79
+ try {
80
+
81
+
82
+
83
+ //DB接続
84
+
85
+ ConnectionDb db = new ConnectionDb();
86
+
87
+ db.conn();
88
+
89
+
90
+
91
+ //入力値を含めたリストを作る
92
+
93
+ List<Stock> list = new ArrayList<Stock>();
94
+
95
+
96
+
97
+ String query = "SELECT S.ITEM_ID,ITEM_NAME,STOCK,PRICE "
98
+
99
+ + "FROM PRODUCT_NAME AS N "
100
+
101
+ + "JOIN PRODUCT_STOCK AS S "
102
+
103
+ + "ON N.ITEM_ID = S.ITEM_ID "
104
+
105
+ + "JOIN PRODUCT_PRICE AS P "
106
+
107
+ + "ON S.ITEM_ID = P.ITEM_ID ";
108
+
109
+ PreparedStatement stmt = db.con.prepareStatement(query);
110
+
111
+ ResultSet rs = stmt.executeQuery();
112
+
113
+
114
+
115
+ int counter = 0;
116
+
117
+ while (rs.next()) {
118
+
119
+ String itemName = rs.getString("ITEM_NAME");
120
+
121
+ int price = rs.getInt("PRICE");
122
+
123
+ int stock = rs.getInt("STOCK");
124
+
125
+ String itemId = rs.getString("ITEM_ID");
126
+
127
+ Number numbr = no.get(counter);
128
+
129
+ list.add(new Stock(stock,itemName,price,itemId,numbr));
130
+
131
+ counter++;
132
+
133
+ }
134
+
135
+
136
+
137
+ req.setAttribute("stocks", list);
138
+
139
+
140
+
141
+ //在庫を超える入力があった時点でループを終了(入力値がマイナスの時も追加)
142
+
143
+ boolean isShortage = false;
144
+
145
+ for(int i=0; i < list.size(); i++) {
146
+
147
+ if( list.get(i).getStock() < Integer.parseInt(values[i])
148
+
149
+ || Integer.parseInt(values[i]) < 0){
150
+
151
+ isShortage = true;
152
+
153
+ break;
154
+
155
+ }
156
+
157
+ }
158
+
159
+
160
+
161
+ if(isShortage) {//在庫切れの時に、true
162
+
163
+         //これはうまくいっています!!↓
164
+
165
+ req.setAttribute("stockErrorMsg", "在庫がありません");
166
+
167
+ req.setAttribute("products", list);
168
+
169
+ RequestDispatcher rd = req.getRequestDispatcher("/WEB-INF/list.jsp");
170
+
171
+ rd.forward(req, res);
172
+
173
+ } else {
174
+
175
+ RequestDispatcher dispatcher =
176
+
177
+ req.getRequestDispatcher("/WEB-INF/stockOK.jsp");
178
+
179
+ dispatcher.forward(req, res);
180
+
181
+
182
+
183
+ rs.close();
184
+
185
+ stmt.close();
186
+
187
+
188
+
189
+ } catch (SQLException e) {
190
+
191
+ e.printStackTrace();
192
+
193
+ }
194
+
195
+ }
62
196
 
63
197
  ```
64
198
 
@@ -66,15 +200,11 @@
66
200
 
67
201
  - req.getAttribute("products",list)の「listを変数に解決できません」というエラー
68
202
 
69
- - 画面チェックをするとHTTPステータス 500 - For input string: ""の画面
70
-
71
203
  ### 試したこと
72
204
 
205
+ - 単語でネット検索
206
+
73
- https://teratail.com/questions/21114
207
+ - https://teratail.com/questions/21114を参考にしたりしました。
74
-
75
- を参考にしたりしました。
76
-
77
-
78
208
 
79
209
 
80
210