JSPに設置したラジオボタンを非選択した際のメッセージ表示について

前提

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)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <-- 略 --> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>アンケートフォーム画面入力</title> </head> <body> <h1>アンケート入力をお願い致します</h1> <!-- <form method="post" action="SFresult" name="sfform" onSubmit="return check()"> --> <form method="post" action="SFresult" name="sfform"> <-- 略 --> 性別(スキップ可):<br /> <input type="radio" name="gender" value="male">男性 <input type="radio" name="gender" value="female">女性 <input type="radio" name="gender" value="other">その他<br /> <br> <-- 略 --> <input type="button" onclick="funcSubmit()" value="送信"> <input type="button" onclick="resetter()" value="取消"> </form> </body> </html>

Servlet(SFresult.java)

package controller2; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/SFresult") public class P08_01_result extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 文字化け防止 request.setCharacterEncoding("utf-8"); // checkBoxの受け取り値を確認 String name = request.getParameter("name"); String id = request.getParameter("id"); String gender = request.getParameter("gender"); String age = request.getParameter("age"); String job = request.getParameter("job"); String info = request.getParameter("info"); String msg = request.getParameter("msg"); System.out.println(gender + "だよ!!"); System.out.println(info); // Viewに表示 request.setAttribute("name", "氏名:" + name); request.setAttribute("id", "ユーザーid:" + id); request.setAttribute("gender",gender); request.setAttribute("age", "年齢:" + age + "代"); request.setAttribute("job", "職業:" + job); request.setAttribute("info", "当社サービスをどこで知りましたか?:" + info); request.setAttribute("msg", "備考:" + msg); // 終了画面への遷移 RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/view/2022.11.16/EndForm.jsp"); rd.forward(request, response); } }

JSP(EndForm.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="controller2.P08_01_result" %> <jsp:useBean id="name" class="java.lang.String" scope="request" /> <jsp:useBean id="id" class="java.lang.String" scope="request" /> <jsp:useBean id="age" class="java.lang.String" scope="request" /> <jsp:useBean id="job" class="java.lang.String" scope="request" /> <jsp:useBean id="info" class="java.lang.String" scope="request" /> <jsp:useBean id="msg" class="java.lang.String" scope="request" /> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>完了画面</title> </head> <body> ご協力ありがとうございます!!!<br /> 結果表示:<br /> <%=name %><br /> <%=id %><br /> 性別: <% String gend = request.getParameter("gender"); if (gend.equals("male")){ gend ="男性"; } else if (gend.equals("female")){ gend ="女性"; } else if (gend.equals("other")){ gend ="その他"; } else if (gend == null){ gend ="回答なし"; } out.print(gend);%><br /> <%=age %><br /> <%=job %><br /> <%=info %><br /> <%=msg %><br /> </body> </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で質問をするのは初めてなので、至らぬ点がございましたらご教示ください。
よろしくお願い致します。

コメントを投稿

0 コメント