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