質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1100閲覧

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

ronron1414

総合スコア1

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2022/11/21 07:50

前提

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で質問をするのは初めてなので、至らぬ点がございましたらご教示ください。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

変数gendがnullのため下記箇所にてエラーになっていると思われます。

java

1gend.equals("male")

この判定の前にnullチェックを行うようにしてみてはいかがでしょうか。

投稿2022/11/21 07:55

plasticgrammer

総合スコア629

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ronron1414

2022/11/21 08:11

plasticgrammerさん、回答ありがとうございます。 例外処理をJSPに落とし込んだことがありませんでしたので、まずそちらの理解を深めたいと思います。 一度「JSP nullチェック」で調べてから修正してみます。詰まったらまた戻ります。
plasticgrammer

2022/11/22 02:24

説明不足ですみません。 nullチェックは、提示頂いたコードの条件「gend == null」のif文のことです。 これを最初に判定すればよいと思います。
ronron1414

2022/11/22 08:01

plasticgrammerさん、回答ありがとうございます!!!! 出来ました!!!! この1日大迷走しました(分岐処理をサーブレットに渡してやらせたりとか、無理にJSP式で分岐処理させるようにしたりとか)…if文のチェックする順番が違っていたんですね。 分岐処理についてまだ理解が足りないと痛感しました。 本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問