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

質問編集履歴

1

作成したい画面のJSPを追記 書き直したjavaコードを貼り付け

2017/08/17 09:07

投稿

cayribaka
cayribaka

スコア19

title CHANGED
File without changes
body CHANGED
@@ -1,198 +1,243 @@
1
1
  現在、趣味で体重管理アプリケーションなるものを作成しております。
2
2
  開発環境はEclipse4.6
3
3
  言語はJavaです。
4
-
5
4
  ユーザーの名前や身長、体重を登録する画面を作成しているのですが、DBのデータを更新することができません。
6
-
7
5
  DBとの接続はDAOを使っています。
8
-
9
- コードのどこを変えればよいのかわからず、詰まっております。
10
- 助けてください。
11
6
  ```Java
12
7
  package servlet;
13
-
14
- import java.io.IOException;
15
-
16
- import javax.servlet.RequestDispatcher;
17
- import javax.servlet.ServletException;
18
- import javax.servlet.annotation.WebServlet;
19
- import javax.servlet.http.HttpServlet;
20
- import javax.servlet.http.HttpServletRequest;
21
- import javax.servlet.http.HttpServletResponse;
22
- import javax.servlet.http.HttpSession;
23
-
24
- import model.SetUpLogic;
8
+ //import文省略
25
- import model.User;
26
-
27
9
  @WebServlet("/SetUp")
28
10
  public class SetUp extends HttpServlet {
29
11
  private static final long serialVersionUID = 1L;
30
12
 
31
13
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
32
14
  HttpSession session = request.getSession();
33
- //String userName ;
34
- Double height ;
35
- Double targetWeight;
36
- StringBuffer urlBuffer = request.getRequestURL();
15
+ //StringBuffer urlBuffer = request.getRequestURL();
37
- String url = urlBuffer.append("?").append(request.getQueryString()).toString();
16
+ //String url = urlBuffer.toString();
38
17
  User loginUser = (User) session.getAttribute("loginUser");
39
- int indexOfParam = url.indexOf("=");
40
18
 
19
+ //データの読み込み
41
- if(loginUser != null) {
20
+ if(loginUser != null){
42
- if(url.indexOf("?") != -1) { // URLにパラメータが含まれている時
21
+ request.setAttribute("userName",loginUser.getUserName());
43
- String userName = request.getParameter("userName");
22
+ //System.out.println("userName");
23
+ request.setAttribute("height", loginUser.getHeight() != 0 ? String.format("%.2f", loginUser.getHeight()) : "");
44
- String Height = request.getParameter("Height");
24
+ //System.out.println("height");
25
+ request.setAttribute("targetWeight", loginUser.getHeight() != 0 ? String.format("%.2f", loginUser.getTargetWeight()) : "");
45
- String strTargetWeight = request.getParameter("strTargetWeight");
26
+ //System.out.println("targetWeight");
46
27
 
47
- //それぞれのパラメータの値を上の3つの変数に代入
48
- String userData="SetUp?userName=" + userName + "&height=" + Height + "&targetWeight=" + strTargetWeight;
28
+ RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/setUp.jsp");
49
- SetUpLogic sul=new SetUpLogic();
50
- String errorMsg = "";
51
- try {
52
- boolean judge = false; // 不正な入力値ではないかどうか
53
- boolean noInputText = false; // 未入力のテキストボックスが存在するかどうか
54
- request.setCharacterEncoding("utf-8");
29
+ requestDispatcher.forward(request, response);
55
- if((url.length() == 0)) {
56
- url = loginUser.getUserName();
57
- noInputText = true;
58
- }
30
+ }
59
- else if (url.length() > 64) {
31
+ else {
60
- url = loginUser.getUserName();
61
- errorMsg = "名前は64文字以内で入力してください";
32
+ response.sendRedirect("/bodyMassIndex/");
62
- throw new IllegalArgumentException();
63
- }
33
+ }
64
- else {
65
- judge = true;
66
- }
34
+ }
67
35
 
68
- String Heights = request.getParameter("height");
36
+ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
69
- //Double Sincyo;
70
- // 以下、入力された値桁数チェック
37
+ //データ書き込み(更新)名前・身長・目標体重を送信する。
71
38
 
72
- int seisuKeta = 0;
39
+ String errorMsg = "";
73
- int shosuKeta = 0;
40
+ //入力された値のチェック(name)
41
+ try {
42
+ boolean judge = false; // 不正な入力値ではないかどうか
43
+ boolean noInputText = false; // 未入力のテキストボックスが存在するかどうか
74
- int conmaIndex = Heights.indexOf(".");
44
+ request.setCharacterEncoding("utf-8");
45
+ HttpSession session = request.getSession();
46
+ User loginUser = (User) session.getAttribute("loginUser");
47
+ //フォームに入力されたデータの取得
48
+ String userName =request.getParameter("userName"); /* 入力された名前を代入 */
75
- if(conmaIndex != -1) {
49
+ if((userName.length() == 0)) {
76
- seisuKeta = Heights.substring(0, conmaIndex).length();
50
+ userName = loginUser.getUserName();
77
- shosuKeta = Heights.substring(conmaIndex + 1).length();
51
+ noInputText = true;
78
- }
52
+ }
53
+ else if (userName.length() > 64) {
54
+ userName = loginUser.getUserName();
55
+ errorMsg = "名前は64文字以内で入力してください";
56
+ throw new IllegalArgumentException();
57
+ }
79
- else {
58
+ else {
80
- seisuKeta =Heights.length();
59
+ judge = true;
81
- }
60
+ }
82
- if(3 < seisuKeta || 2 < shosuKeta) {
83
- errorMsg = "身長の整数桁は3桁、小数点以下の桁は2桁までで入力し直してください。";
84
- throw new IllegalArgumentException();
85
- }
86
61
 
62
+ //フォームに入力されたheightの値を取得する
63
+ String height = request.getParameter("height");
87
- // 桁数チェック終わり
64
+ // 以下、入力された値の桁数チェック
88
65
 
66
+ int seisuKeta = 0;
67
+ int shosuKeta = 0;
68
+ int conmaIndex = height.indexOf(".");
89
- if(Heights.length() == 0) {
69
+ if(conmaIndex != -1) {
90
- height = loginUser.getHeight();
70
+ seisuKeta = height.substring(0, conmaIndex).length();
91
- noInputText = true;
71
+ shosuKeta = height.substring(conmaIndex + 1).length();
92
- }
72
+ }
93
- else {
73
+ else {
74
+ seisuKeta = height.length();
75
+ }
76
+ if(3 < seisuKeta || 2 < shosuKeta) {
94
- errorMsg = "現在の身長は、数で入力してください。";
77
+ errorMsg = "身長の整数桁3桁点以下の桁は2桁ま入力し直してください。";
95
- height =Double.parseDouble(url);
96
- if(height <= 0 || Heights.indexOf("Infinity") != -1 || url.indexOf("NaN") != -1) {
97
- errorMsg = "身長は正の実数で入力してください。";
98
- throw new IllegalArgumentException();
78
+ throw new IllegalArgumentException();
99
- }
79
+ }
100
- judge = true;
101
- }
102
- String TargetWeight = request.getParameter("targetWeight");
103
- double targetWeights;
104
- //入力された値の桁数チェック
105
80
 
106
- int seisuKeta2 = 0;
107
- int shosuKeta2=0;
108
- int conmaIndex2 = TargetWeight.indexOf(".");
109
- if(conmaIndex2 !=-1){
110
- seisuKeta2=TargetWeight.substring(0, conmaIndex2).length();
111
- shosuKeta2=TargetWeight.substring(conmaIndex2 + 1).length();
112
- }
113
- else{
114
- seisuKeta2=TargetWeight.length();
115
- }
116
- if(3 < seisuKeta2 || 2 < shosuKeta2) {
117
- errorMsg = "目標体重の整数桁は3桁、小数点以下の桁は2桁までで入力し直してください。";
118
- throw new IllegalArgumentException();
119
- }
120
- //桁数チェック終わり
81
+ // 桁数チェック終わり
121
82
 
122
- if(TargetWeight.length() == 0) {
83
+ if(height.length() == 0) {
84
+ //身長はdouble型で格納されなければならないので、現在String型のheightをdouble型のdheightに変換する。
85
+ double dheight = Double.parseDouble(height);
123
- targetWeight = loginUser.getTargetWeight();
86
+ dheight = loginUser.getHeight();
124
- noInputText = true;
87
+ noInputText = true;
88
+ }
89
+ else {
90
+ double dheight = Double.parseDouble(height);
91
+ dheight = loginUser.getHeight();
92
+ errorMsg = "現在の身長は、数字で入力してください。";
93
+ if(dheight <= 0 || height.indexOf("Infinity") != -1 || height.indexOf("NaN") != -1) {
94
+ errorMsg = "身長は正の実数で入力してください。";
95
+ throw new IllegalArgumentException();
96
+ }
97
+ judge = true;
98
+ }
99
+
100
+ //フォームに入力されたtargetWeightの値を取得する。
101
+ String targetWeight = request.getParameter("targetWeight");
102
+ //入力された値の桁数チェック
103
+
104
+ int seisuKeta2 = 0;
105
+ int shosuKeta2=0;
106
+ int conmaIndex2 = targetWeight.indexOf(".");
107
+ if(conmaIndex2 !=-1){
108
+ seisuKeta2=targetWeight.substring(0, conmaIndex2).length();
109
+ shosuKeta2=targetWeight.substring(conmaIndex2 + 1).length();
110
+ }
111
+ else{
112
+ seisuKeta2=targetWeight.length();
113
+ }
114
+ if(3 < seisuKeta2 || 2 < shosuKeta2) {
115
+ errorMsg = "目標体重の整数桁は3桁、小数点以下の桁は2桁までで入力し直してください。";
116
+ throw new IllegalArgumentException();
117
+ }
118
+ //桁数チェック終わり
119
+
120
+ if(targetWeight.length() == 0) {
121
+ //目標体重はdouble型で格納されなければならないので、現在String型のtargetWeightをdouble型のdtargetWeightに変換する。
122
+ double dtargetWeight = Double.parseDouble(targetWeight);
123
+ dtargetWeight = loginUser.getTargetWeight();
124
+ noInputText = true;
125
+ }
126
+ else {
127
+ errorMsg = "目標体重は、数字で入力してください。";
128
+ //目標体重はdouble型で格納されなければならないので、現在String型のtargetWeightをdouble型のdtargetWeightに変換する。
129
+ double dtargetWeight =Double.parseDouble(targetWeight);/* 入力された目標体重を代入 */
130
+ if(dtargetWeight <= 0 || targetWeight.indexOf("Infinity") != -1 || targetWeight.indexOf("NaN") != -1) {
131
+ errorMsg = "目標体重は正の実数で入力してください。";
132
+ throw new IllegalArgumentException();
133
+ }
134
+ judge = true;
135
+ }
136
+ request.setAttribute("userName", "");
137
+ request.setAttribute("height", "");
138
+ request.setAttribute("targetWeight", "");
139
+ if(judge) {
140
+ if(noInputText) {
141
+ request.setAttribute("errorMessage", "情報を入力して下さい");
142
+ RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/setUp.jsp");
143
+ requestDispatcher.forward(request, response);
144
+ }
145
+
146
+ //データの書き込み(更新)名前・身長・目標体重を送信する。
147
+ else {
148
+ SetUpLogic sul=new SetUpLogic(); /* SetUpLogicのインスタンス化 */
149
+ double dheight = Double.parseDouble(height);
150
+ dheight = loginUser.getHeight();
151
+ double dtargetWeight = Double.parseDouble(targetWeight);
152
+ dtargetWeight = loginUser.getTargetWeight();
153
+ boolean isUpdate =sul.execute(userName, dheight, dtargetWeight, loginUser); /* インスタンス化した変数でexecuteメソッドを呼ぶ */;
154
+ if(isUpdate) {
155
+ request.setAttribute("userName",loginUser.getUserName());
156
+ request.setAttribute("height", String.format("%.2f", loginUser.getHeight()));
157
+ request.setAttribute("targetWeight",String.format("%.2f", loginUser.getTargetWeight()));
158
+ RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/setUp.jsp");
159
+ requestDispatcher.forward(request, response);
125
160
  }
126
161
  else {
127
- errorMsg = "目標体重は、数字で入力してください。";
128
- targetWeight =Double.parseDouble(url);
129
- if(targetWeight <= 0 || TargetWeight.indexOf("Infinity") != -1 || TargetWeight.indexOf("NaN") != -1) {
162
+ response.sendRedirect("SetUp");/* updateに失敗したら、ここに来る */
130
- errorMsg = "目標体重は正の実数で入力してください。";
131
- throw new IllegalArgumentException();
132
- }
133
- judge = true;
134
163
  }
135
- request.setAttribute("userName", "");
136
- request.setAttribute("height", "");
137
- request.setAttribute("targetWeight", "");
138
- if(judge) {
139
- if(noInputText) {
140
- request.setAttribute("errorMessage", "情報を入力して下さい");
141
- RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/setUp.jsp");
142
- requestDispatcher.forward(request, response);
143
- }
144
- else {
145
- //SetUpLogic SUL=new SetUpLogic();
146
- boolean isUpdate =sul.execute(url, height, targetWeight, loginUser);
147
- if(isUpdate) {
148
- request.setAttribute("userName",loginUser.getUserName());
149
- request.setAttribute("height", String.format("%.2f", loginUser.getHeight()));
150
- request.setAttribute("targetWeight",String.format("%.2f", loginUser.getTargetWeight()));
151
- RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/setUp.jsp");
152
- requestDispatcher.forward(request, response);
153
- }
154
- else {
155
- response.sendRedirect("SetUp");
156
- }
157
- }
158
- }
159
- else {
160
- request.setAttribute("errorMessage", "情報を入力して下さい");
161
- RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/setUp.jsp");
162
- requestDispatcher.forward(request, response);
163
- }
164
- } catch (IllegalArgumentException e) {
165
- request.setAttribute("userName", "");
166
- request.setAttribute("height", "");
167
- request.setAttribute("targetWeight", "");
168
- request.setAttribute("errorMessage", errorMsg);
169
- RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/setUp.jsp");
170
- requestDispatcher.forward(request, response);
171
164
  }
172
- }
165
+ }
173
-
174
-
175
166
  else {
176
- request.setAttribute("userName", "");
167
+ request.setAttribute("errorMessage", "情報を入力して下さい");
177
- request.setAttribute("height", "");
178
- request.setAttribute("targetWeight", "");
179
168
  RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/setUp.jsp");
180
169
  requestDispatcher.forward(request, response);
181
170
  }
171
+ } catch (IllegalArgumentException e) {
172
+ request.setAttribute("userName", "");
173
+ request.setAttribute("height", "");
174
+ request.setAttribute("targetWeight", "");
175
+ request.setAttribute("errorMessage", errorMsg);
176
+ RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/setUp.jsp");
177
+ requestDispatcher.forward(request, response);
182
- }
178
+ }
179
+ }
180
+ else {
181
+ request.setAttribute("userName", "");
182
+ request.setAttribute("height", "");
183
+ request.setAttribute("targetWeight", "");
184
+ RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/setUp.jsp");
185
+ requestDispatcher.forward(request, response);
186
+ }
187
+ }
183
188
 
189
+ ```
190
+ ```JSP
191
+ <%@ page language="java" contentType="text/html; charset=UTF-8"
192
+ pageEncoding="UTF-8"%>
193
+ <!DOCTYPE html">
194
+ <html>
195
+ <head>
196
+ <link rel="stylesheet" type="text/css" href="css/menu.css"/>
197
+ <link rel="stylesheet" type="text/css" href="css/setUp.css?20170811"/>
198
+ <meta charset="UTF-8">
199
+ <title>体重管理アプリケーション</title>
200
+ <script src="js/lib/jquery-3.2.1.min.js"></script>
201
+ <script src="js/menu.js"></script>
202
+ <script type="text/javascript">
203
+ function disp(userId){
204
+ myRet = confirm("情報を更新してよろしいですか?");
184
205
 
206
+ if ( myRet == true ){
207
+ var userName = document.getElementById('text1').value;
208
+ var height = document.getElementById('text2').value;
209
+ var targetWeight = document.getElementById('text3').value;
185
210
 
211
+ location.href= ' /bmi/SetUp?userName=' + userName + '&height=' + height + '&targetWeight=' + targetWeight;
212
+ }else{
213
+ alert("キャンセルされました");
186
214
 
187
- //System.out.println(userName);
215
+ }
216
+ }
188
- //System.out.println(height);
217
+ </script>
189
- //System.out.println(targetWeight);
190
218
 
191
- else { // URLにパラメータが含まれていない時
192
- request.setAttribute("userName",loginUser.getUserName());
193
- request.setAttribute("height", loginUser.getHeight() != 0 ? String.format("%.2f", loginUser.getHeight()) : "");
194
- request.setAttribute("targetWeight", loginUser.getHeight() != 0 ? String.format("%.2f", loginUser.getTargetWeight()) : "");
195
- RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/setUp.jsp");
196
- requestDispatcher.forward(request, response);
197
- }
198
- ```
219
+ </head>
220
+ <body onload="selectColorChange(4);">
221
+ <jsp:include page="menu.jsp"/>
222
+ <div id="div1">
223
+ <h1>設定情報</h1>
224
+ <p id="errorMessage"><%= request.getAttribute("errorMessage") != null ? request.getAttribute("errorMessage") : "" %></p>
225
+ <input id="text1" type="text" name="userName" value="<%= request.getAttribute("userName") %>" placeholder="お名前"/>
226
+ <br/>
227
+ <input id="text2" type="text" name="height" value="<%= request.getAttribute("height") %>" placeholder="現在の身長"/>cm
228
+ <br/>
229
+ <input id="text3" type="text" name="targetWeight" value="<%= request.getAttribute("targetWeight") %>" placeholder="目標体重"/>kg
230
+ <br/>
231
+ <input id="button1" type="submit" value="保存" onclick="disp()"/>
232
+ </div>
233
+ </body>
234
+ </html>
235
+ ```
236
+ 改めてコードを書き直しました。
237
+ エラー java.lang.NullPointerException servlet.SetUp.doGet(SetUp.java:63) javax.servlet.http.HttpServlet.service(HttpServlet.java:621) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
238
+ は消えました。
239
+
240
+ 値の受け取りはできますが、doPost()からの値の引き渡しができていないです。
241
+ ブラウザの入力のフォームに値を入力して、保存ボタンを押すと、ブラウザのアドレスバーにはこのように
242
+ http://localhost:xxxx/bmi/SetUp?userName=田中&height=169.00&targetWeight=50.00 値は入っています。
243
+ 結局コードが長いです。すみません。