〇やりたいこと
アンケートの入力、入力チェック、結果表示までの流れを作っています
1.Change_Updata.jspで項目の入力
2.ChangeServlet.javaで入力チェック
3-1.エラーが無ければresult.jspで「更新できました」と表示
3-2.エラーがあれば、Change_Update.jspに戻って再入力。そのときにどこでエラーが出たのかを表示したい。
1→2は正常に動いている(と思います。)
しかし2のServletを通ったあと、jspファイルに戻ってくるのですが、エラーが表示されません。また入力チェックを通るように打ち込んでもjspファイルに戻ってきてしまいます。
つまり
・エラーメッセージの表示方法
・正常な場合のresult.jspへの遷移方法がわかりません。
以下コードです。
Change_Update
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ page import="Change.DataBase"%> 4<%@ page import="java.lang.*" %> 5<!DOCTYPE html> 6<html> 7<head> 8<meta charset="UTF-8"> 9<title>Change_task</title> 10<link rel="stylesheet" href="${pageContext.request.contextPath}/CSS/Change.css"> 11</head> 12<body> 13<H1>アンケートフォーム</H1> 14 <% DataBase db = new DataBase(); %> 15 <% 16 if(db.getError() != null){ %> 17 18 <p><% out.println(db.getError()); %></p> 19 20 <% 21 }else{ 22 %> 23 <P>以下のアンケートフォームを入力して変更ボタンを押下してください</P> 24 <FORM method="POST" name="question_form" id="form" action="/Change/ChangeServlet"> 25 <Input type="hidden" name="hiddenNO" value=<%= request.getParameter("ankeno") %>> 26 <input type="hidden" name="move" value="update"> 27 <TABLE class="table"> 28 ~中略~ 29 </TABLE> 30 <DIV class="send_div"> 31 <INPUT type="submit" class="send_button" value="変更" > 32 </DIV> 33 </FORM> 34 <FORM> 35 <DIV> 36 <INPUT type="button" class="reset" value="リセット" onClick="location.reload();"> 37 </DIV> 38 </FORM> 39 <% } %> 40</body> 41</html>
servlet
1package Change; 2 3import java.io.IOException; 4import java.sql.Connection; 5import java.sql.PreparedStatement; 6import java.sql.SQLException; 7import java.sql.Statement; 8 9import javax.servlet.ServletException; 10import javax.servlet.http.HttpServlet; 11import javax.servlet.http.HttpServletRequest; 12import javax.servlet.http.HttpServletResponse; 13 14 15public class ChangeServlet extends HttpServlet { 16 private static final long serialVersionUID = 1L; 17 18 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 19 request.setCharacterEncoding("utf-8"); 20 21 //前準備 22 String e; 23 int count = 0; 24 DataBase db = new DataBase(); 25 26 //各データを受け取って、条件に合うのか確かめる 27 //郵便番号 28 String p1 = request.getParameter("post_num1"); 29 String p2 = request.getParameter("post_num2"); 30 if(p1 != null && p1.length() ==3) { //郵便番号1がNullではなくかつ3桁か 31 count++; 32 }else { 33 e = "郵便番号1は3桁の数字で入力してください"; 34 db.setError(e); 35 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 36 } 37 if(p2 != null && p2.length() ==4) { //郵便番号2がNullではなくかつ4桁か 38 count++; 39 }else { 40 e = "郵便番号2は4桁の数字で入力してください"; 41 db.setError(e); 42 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 43 } 44 //住所チェック 45 String address = request.getParameter("address"); 46 if(address != null) { 47 count++; 48 }else { 49 e = "住所を入力してください"; 50 db.setError(e); 51 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 52 } 53 //氏名 54 String name = request.getParameter("name"); 55 if(name != null ) { 56 count++; 57 }else { 58 e = "氏名を入力してください"; 59 db.setError(e); 60 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 61 } 62 //年 63 String year = request.getParameter("year"); 64 if(year != null) { 65 count++; 66 }else { 67 e = "生まれ年を入力してください"; 68 db.setError(e); 69 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 70 } 71 //月 72 String month = request.getParameter("month"); 73 if(month != null && month.length() <= 2 && Integer.parseInt(month) <= 12 && Integer.parseInt(month) >= 1) { 74 count++; 75 }else { 76 e = "生まれ月は1~12で入力してください"; 77 db.setError(e); 78 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 79 } 80 //日 81 String date = request.getParameter("date"); 82 if(date != null && date.length() <= 2 && Integer.parseInt(date) <=31 && Integer.parseInt(date) >=1) { 83 count++; 84 }else { 85 e = "生まれ日は1~31で入力してください"; 86 db.setError(e); 87 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 88 } 89 //血液 90 String blood = request.getParameter("blood"); 91 if(blood != null) { 92 count++; 93 }else { 94 e = "血液型を選択してください"; 95 db.setError(e); 96 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 97 } 98 //意見 99 String opinion = request.getParameter("opinion"); 100 if(opinion != null && opinion.length() <= 200) { 101 count++; 102 }else { 103 e = "ご意見は200文字まで入力できます"; 104 db.setError(e); 105 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 106 } 107 //総合 108 if(count == 10) { 109 //SQL文の準備(すべてのカラムにアンケート内容を入れるので、prepareを使って後からバインドさせる) 110 String sql ="UPDATE Information SET POSTNUM = ? , ADDRESS = ? , BIRTHYEAR = ? , BIRTHMONTH = ? , BIRTHDAY = ? , PHONE1 = ? , PHONE2 = ? , PHONE3 = ? , BLOOD = ? , BREAKFAST = ? , OPINION = ? WHERE NO = ?"; 111 //接続準備 112 Connection conn = null; 113 PreparedStatement smt = null; 114 //更新のコード 115 if(request.getParameter("move") == "update") { 116 //接続開始 117 try { 118 conn = DBManager.getConnection(); 119 //バインド用のSQLを準備 120 smt = conn.prepareStatement(sql); 121 122 //バインド開始 123 smt.setString(1, (request.getParameter("post_num1") + request.getParameter("post_num2"))); 124 smt.setString(2, request.getParameter("address")); 125 smt.setString(3, request.getParameter("year")); 126 smt.setString(4, request.getParameter("month")); 127 smt.setString(5, request.getParameter("date")); 128 smt.setString(6, request.getParameter("phone_num1")); 129 smt.setString(7, request.getParameter("phone_num2")); 130 smt.setString(8, request.getParameter("phone_num3")); 131 smt.setString(9, request.getParameter("blood")); 132 smt.setString(10, request.getParameter("food")); 133 smt.setString(11, request.getParameter("opinion")); 134 smt.setString(12, request.getParameter("hiddenNO")); 135 //実行 136 smt.executeQuery(); 137 138 }catch(SQLException er) { 139 throw new ServletException(er); 140 }finally { 141 if(smt != null) { 142 try {smt.close();}catch(SQLException ignore) {} 143 } 144 if(conn != null) { 145 try {conn.close();}catch(SQLException ignore) {} 146 } 147 } 148 //登録をする場合のコード 149 }else if(request.getParameter("move") == "regist") { 150 //insertさせるNoは、今テーブルに入っている数+1なので、countを求めるSQL 151 String sql2 = "SELECT count(No) FROM Information"; 152 Statement smt2 = null; 153 154 //接続開始 155 try { 156 conn = DBManager.getConnection(); 157 //バインド用のSQLを準備 158 smt = conn.prepareStatement(sql); 159 //count用のSQL準備&実行 160 smt2 = conn.createStatement(); 161 count = smt2.executeUpdate(sql2); 162 163 //バインド開始 164 smt.setInt(1, count+1);//NOやからここより前にcount(No)の値をselectしておかないといけない。それプラス1 165 smt.setString(2, (request.getParameter("post_num1") + request.getParameter("post_num2"))); 166 smt.setString(3, request.getParameter("address")); 167 smt.setString(4, request.getParameter("year")); 168 smt.setString(5, request.getParameter("month")); 169 smt.setString(6, request.getParameter("date")); 170 smt.setString(7, request.getParameter("phone_num1")); 171 smt.setString(8, request.getParameter("phone_num2")); 172 smt.setString(9, request.getParameter("phone_num3")); 173 smt.setString(10, request.getParameter("blood")); 174 smt.setString(11, request.getParameter("food")); 175 smt.setString(12, request.getParameter("opinion")); 176 //実行 177 smt.executeQuery(); 178 179 }catch(SQLException er) { 180 throw new ServletException(er); 181 }finally { 182 if(smt != null) { 183 try {smt.close();}catch(SQLException ignore) {} 184 } 185 if(conn != null) { 186 try {conn.close();}catch(SQLException ignore) {} 187 } 188 } 189 } 190 191 request.getRequestDispatcher("/jsp/result.jsp").forward(request, response); 192 } 193 doGet(request, response); 194 } 195 196} 197
result
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8"> 7<title>登録後</title> 8</head> 9<body> 10 11 <p>アンケート情報を更新しました</p> 12 13<a href="Register.jsp">アンケートに戻る</a> 14 15</body> 16</html>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/16 09:43