前提
Eclipse で JSPとサーブレットを使って、WEBアプリケーションを作成しています。
フォームのJSPにラジオボタンを設置して、
サーブレットが値を受け取り、確認画面のJSPに値を再度渡す流れを作りました。
HomeForm.jsp → SFresult.java → EndForm.jsp
実現したいこと
homeFormに設置したラジオボタン(gender)には
男性(male)、女性(female)、その他(other)の3つの選択肢の他、
選択しなかった際に「回答なし」を表示させたいと思います。
発生している問題・エラーメッセージ
org.apache.jasper.JasperException: [/WEB-INF/view/2022.11.16/EndForm.jsp] の処理中に行番号 [23] で例外が発生しました。
20: <%=id %><br />
21: 性別:
22: <% String gend = request.getParameter("gender");
23: if (gend.equals("male")){
24: gend ="男性";
25: }
26: else if (gend.equals("female")){
根本原因
java.lang.NullPointerException
org.apache.jsp.WEB_002dINF.view._2022_11_16.EndForm_jsp._jspService(EndForm_jsp.java:187)
該当のソースコード
JSP(HomeForm.jsp)
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<-- 略 --> 4<!DOCTYPE html> 5<html> 6<head> 7<meta charset="UTF-8"> 8 9<title>アンケートフォーム画面入力</title> 10</head> 11<body> 12 <h1>アンケート入力をお願い致します</h1> 13 <!-- <form method="post" action="SFresult" name="sfform" onSubmit="return check()"> --> 14 <form method="post" action="SFresult" name="sfform"> 15<-- 略 --> 16 性別(スキップ可):<br /> 17 <input type="radio" name="gender" value="male">男性 18 <input type="radio" name="gender" value="female">女性 19 <input type="radio" name="gender" value="other">その他<br /> <br> 20<-- 略 --> 21 <input type="button" onclick="funcSubmit()" value="送信"> 22 <input type="button" onclick="resetter()" value="取消"> 23 24 25 </form> 26 27</body> 28</html>
Servlet(SFresult.java)
1package controller2; 2 3import java.io.IOException; 4 5import javax.servlet.RequestDispatcher; 6import javax.servlet.ServletException; 7import javax.servlet.annotation.WebServlet; 8import javax.servlet.http.HttpServlet; 9import javax.servlet.http.HttpServletRequest; 10import javax.servlet.http.HttpServletResponse; 11 12@WebServlet("/SFresult") 13public class P08_01_result extends HttpServlet { 14 private static final long serialVersionUID = 1L; 15 16 protected void doPost(HttpServletRequest request, HttpServletResponse response) 17 throws ServletException, IOException { 18 19 // 文字化け防止 20 request.setCharacterEncoding("utf-8"); 21 22 // checkBoxの受け取り値を確認 23 String name = request.getParameter("name"); 24 String id = request.getParameter("id"); 25 String gender = request.getParameter("gender"); 26 String age = request.getParameter("age"); 27 String job = request.getParameter("job"); 28 String info = request.getParameter("info"); 29 String msg = request.getParameter("msg"); 30 31 System.out.println(gender + "だよ!!"); 32 System.out.println(info); 33 34 // Viewに表示 35 request.setAttribute("name", "氏名:" + name); 36 request.setAttribute("id", "ユーザーid:" + id); 37 request.setAttribute("gender",gender); 38 request.setAttribute("age", "年齢:" + age + "代"); 39 request.setAttribute("job", "職業:" + job); 40 request.setAttribute("info", "当社サービスをどこで知りましたか?:" + info); 41 request.setAttribute("msg", "備考:" + msg); 42 43 44 45 // 終了画面への遷移 46 RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/view/2022.11.16/EndForm.jsp"); 47 rd.forward(request, response); 48 49 } 50 51}
JSP(EndForm.jsp)
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ page import="controller2.P08_01_result" %> 4 <jsp:useBean id="name" class="java.lang.String" scope="request" /> 5 <jsp:useBean id="id" class="java.lang.String" scope="request" /> 6 <jsp:useBean id="age" class="java.lang.String" scope="request" /> 7 <jsp:useBean id="job" class="java.lang.String" scope="request" /> 8 <jsp:useBean id="info" class="java.lang.String" scope="request" /> 9 <jsp:useBean id="msg" class="java.lang.String" scope="request" /> 10<!DOCTYPE html> 11<html> 12<head> 13<meta charset="UTF-8"> 14<title>完了画面</title> 15</head> 16<body> 17ご協力ありがとうございます!!!<br /> 18結果表示:<br /> 19<%=name %><br /> 20<%=id %><br /> 21性別: 22<% String gend = request.getParameter("gender"); 23if (gend.equals("male")){ 24gend ="男性"; 25} 26else if (gend.equals("female")){ 27gend ="女性"; 28} 29else if (gend.equals("other")){ 30gend ="その他"; 31} 32else if (gend == null){ 33gend ="回答なし"; 34} 35out.print(gend);%><br /> 36<%=age %><br /> 37<%=job %><br /> 38<%=info %><br /> 39<%=msg %><br /> 40 41</body> 42</html>
試したこと
性別:
<% String gend = request.getParameter("gender");
if (gend.equals("male")){
gend ="男性";
} 略
else if (gend == null){ ←この部分を gend.equals("null") や gend.isEmpty() にしてみました。
gend ="aaa";
}
JSPから受け取る値が何かを知りたくて、サーブレット側でgenderを出力してみましたが、nullだったので、どちらかと思ったのですがエラーになってしまいます。
補足情報
下記に類似の質問があったかも知れませんが、自分の学習レベルでは理解に至れず質問しました。
(実際いくつか類似質問を見ましたが、理解が難しかったです。)
teratailで質問をするのは初めてなので、至らぬ点がございましたらご教示ください。
よろしくお願い致します。

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2022/11/21 08:11
2022/11/22 02:24
2022/11/22 08:01