発生している問題・エラーメッセージ
Java,JSP,Servletで生徒の成績管理のプログラムを作成しています。
現在、以下のように、受けた試験の試験日と得点を更新・削除の機能の作成を行っております。
現状、更新や削除を押下するとnullエラーが起きてしまう状態になっております。
このとき、formで送っているものは生徒ID・試験日・教科ID・得点なのですが、すべてnullになっていることを確認しました。
しかし、Chromeの開発ツールで見たところ、すべてvalueに値が入っており、なぜnullになってしまうのかがわからない状態になっております。
同様のロジックで一度削除・更新機能が正常に動いていることは確認したのですが、少しソースをいじったところ、このような状態になってしまいました。
以前のコードの状態に戻してみましたが、同様のエラーが出てしまうようになってしまいました。
こちらの解決方法につきましてご教示いただけますと幸いです。
該当のソースコード(文字制限の関係上、削除機能部分のみの記載です)
test-results-regist.jsp
<!--省略 --> <form action="testResultsRegistEdit" method="post"> <table class="input-form-table"> <tr> <td>試験日</td> <td><select name="test_day"> <option value="">すべての試験日</option> <!-- 試験日のプルダウン記述 --> </select></td> </tr> <tr> <td>学年</td> <td><input type="text" id="year" name="school_year" maxlength='10' placeholder="学年(半角数字)"></td> </tr> <tr> <td>クラス</td> <td><input type="text" id="class" name="school_class" maxlength='10' placeholder="クラス(半角数字)"></td> </tr> </table> <div class="buttons"> <div class="submit-button text-center test-results-button"> <button type="submit" name="mode" value="search">検索</button> </div> <div class="submit-button text-center test-results-button"> <button type="button" onclick="clearField()">クリア</button> </div> </div> </form> </div> <%if(testResults != null) {%> <%for(TestResult data: testResults) {%> <table class="table search-result-table"> <thead> <tr> <th>学年</th> <th>クラス</th> <th>生徒ID</th> <th>名前</th> </tr> </thead> <tbody> <tr> <td><%=data.getSchool_year() %></td> <td><%=data.getSchool_class() %></td> <td><%=data.getStudent_id() %></td> <td><%=data.getStudent_name() %></td> </tr> </tbody> <thead> <tr> <th>試験日</th> <th>科目</th> <th>得点</th> <th>更新</th> <th>削除</th> </tr> </thead> <%for (TestResult data2: testResults2) {%> <%if (data2.getStudent_id().equals(data.getStudent_id())) {%> <form action="testResultsRegistEdit" method="post"> <input type="hidden" name="student_id" value="<%=data.getStudent_id() %>"> <!--生徒IDをsubmit --> <tr> <td><input type="date" name="test_day" value="<%=data2.getTest_day() %>" max="2999-12-31"> <!--試験日をsubmit --></td> <td><%=data2.getSubject_name() %> <input type="hidden" name="subject_id" value="<%=data2.getSubject_id() %>"> <!--教科IDをsubmit --></td> <td><input type="text" name="score" value="<%=data2.getScore() %>"> <!--得点をsubmit --></td> <td> <button type="submit" name="mode" value="update">更新</button> </td> <td> <button type="submit" name="mode" value="delete">削除</button> </td> </tr> </form> <%} %> <%} %> </table> <%} %> <%} %> <!--以下省略 -->
TestResultsBeans.java
//import省略 public class TestResultsBeans { private static String student_id; private static String subject_id; private static String score; private static String test_day; private static Connection conn = null; private static PreparedStatement ps = null; private static ResultSet result = null; static String user = "suser"; static String password = "spass"; static String url = "jdbc:mysql://localhost:3306/mydb?autoReconnect=true&useSSL=false"; public TestResultsBeans(HttpServletRequest request) { setStudent_id(request.getParameter("student_id")); setSubject_id(request.getParameter("subject_id")); setScore(request.getParameter("score")); setTest_day(request.getParameter("test_day")); } public static String getStudent_id() { return student_id; } public static void setStudent_id(String student_id) { TestResultsBeans.student_id = student_id; } public static String getSubject_id() { return subject_id; } public static void setSubject_id(String subject_id) { TestResultsBeans.subject_id = subject_id; } public static String getScore() { return score; } public static void setScore(String score) { TestResultsBeans.score = score; } public static String getTest_day() { return test_day; } public static void setTest_day(String test_day) { TestResultsBeans.test_day = test_day; } public static boolean deleteData() { try { System.out.println("削除処理開始"); String sql = "DELETE FROM test_results WHERE student_id = ? and subject_id = ? and test_day = ?"; Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url, user, password); ps = conn.prepareStatement(sql); //以下の3つはすべてnullで出力される System.out.println(student_id); System.out.println(subject_id); System.out.println(test_day); ps.setInt(1, Integer.parseInt(student_id)); ps.setInt(2, Integer.parseInt(subject_id)); ps.setDate(3, Date.valueOf(test_day)); System.out.println(ps); ps.executeUpdate(); return true; } catch(Exception e) { e.printStackTrace(); return false; } finally { if(conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); System.out.println("MySQLのクローズに失敗しました。"); } } } } }
TestResultsRegistEditServlet.java
(かなり省略しました)
//省略 public class TestResultsRegistEditServlet extends HttpServlet{ Connection conn = null; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ request.setCharacterEncoding("UTF-8"); String mode = request.getParameter("mode"); String status = "Success!"; switch(mode) { case "delete": try { if(TestResultsBeans.deleteData() == false) { status = "Failed..."; } } catch(Exception e) { e.printStackTrace(); } finally { try { conn.close(); request.setAttribute("status", status); request.getRequestDispatcher("test-results-regist.jsp").forward(request, response); } catch (SQLException e) { System.out.println("MySQLのクローズに失敗しました。"); } } } break; } } }
試したこと
・ブラウザのキャッシュクリア
・Eclipseのキャッシュクリア
・新しくプロジェクトを作成し、ソースをコピペして起動
回答1件
あなたの回答
tips
プレビュー