こんばんは、今日も質問させていただきます。宜しくお願いします<(_ _)>
データ入力用のJSPと入力データ確認用のJSP二枚があります。データ入力画面で名前とか住所を入力し、確認画面へ遷移しそこでキャンセルボタンでデータ入力画面に戻ったとき、さきほどいれた値を表示させたいのです。
<input type="radio" name="sex" value="0" <% if(bean.getSex != null || bean.getSex.equals("0")){%>checked<%}%>>男
ラジオボタンで男女を選択させるのですが、上記のbeanはビーンクラスのid名で、getSexはvalueの値を返すメソッドになります。(0が男で1が女)
初めてデータ入力する場合(bean.getSex != null )もしくは既に男を選択していた場合(bean.getSex.equals("0"))は「checked」を表示させるようにしているのですが、実行すると「java.lang.NullPointerException」というエラーがでます。
名前を入れるテキストボックスだけの場合は問題なく動きます。
<input type="text" name="name" value="<% if(bean.getName() != null){ %><%= bean.getName() %><% } %>" >
初期の場合は空白で、名前をいれて次の画面に遷移してキャンセルでまたもどってきた場合、きちんと値を保持しています。
2つともやっていることは同じなのに(少なくとも私はそう思うんです)、どうしてラジオボタンだけはエラーがでるのでしょうか?
サーブレットで画面遷移し、メソッドの類は全部ビーンでまとめています。
お忙しいとは思いますが、ご教示のほど宜しくお願い致します<(_ _)>
No.5ベストアンサー
- 回答日時:
とおもったら早とちりしてました。
よくみたら。。。
想像するにBeanのコンストラクタで
getSexで返すパラメータの初期化をしていないのではないでしょうか?
もしくはnullで初期化しているとか???
だから
bean.getSex().equals("0")のところで
bean.getSex()がnullの可能性があり、
nullなものにたいして.equalsメソッドを使おうとするから
落ちているのだと思います。
もしgetSexで返すパラメータがStringなら""(空文字)を使ってコンストラクタで初期化しておきば大丈夫ですよ。
chi-kon様、お忙しい中の書き込みありがとうございます。
>bean.getSex().equals("0")のところで
bean.getSex()がnullの可能性があり、
nullなものにたいして.equalsメソッドを使おうとするから
落ちているのだと思います。
>もしgetSexで返すパラメータがStringなら""(空文字)を使ってコンストラクタで初期化しておきば大丈夫ですよ。
chi-kon様の仰る通りでした。String型を使っているので、””と初期化したところ、「nullではなく」という条件をつけなくてもスムーズに動きました。とても嬉しかったです。
今回のことはとても勉強になりました。以後初期化をきちんとして、皆様の手を煩わせないよう精進致します。
この度は本当にありがとうございました<(_ _)>
No.4
- 回答日時:
ソースを全部みたわけではないのでなんともいえませんが、
JSPから利用しようとしているBeanがnullなためです。
<% if(bean.getSex().equals("0")){%>
だからでるというわけでないんです。
このコードが出現するまでにnewされていれば、
nullpointerexceptionはでません。
いつbeanが実際に生成されるのかをつかめばわかるとおもいます。
まぁいつ生成されるかわからないものにたいしては
(null_check && 条件)みたいにしておけばいいとおもいます。
No.3
- 回答日時:
<% if(bean.getSex != null && bean.getSex.equals("0")){%>
にしてみたら?
この回答への補足
こんばんは。
今chi-kon様の書き込みを見て、下記のコードを実行してみたところ、無事動きました。(最初は男を選択させておきたいので)
<% if(bean.getSex() != null && bean.getSex().equals("0")|| bean.getSex() == null){%>
うーん、とても不思議です。
<% if(bean.getSex() != null && bean.getSex().equals("0")){%>
だと普通に動くのに、
<% if(bean.getSex().equals("0")){%>
という条件だけだとなぜエラーがでるのでしょうか? 私には「bean.getSex() != null」がなければ何故エラーになるのかいまひとつわかりません。
「nullじゃなくて、かつvalueが0」という条件と「valueが0」という条件に大差はないように思えます。
もしご存知ならば、なぜエラーが出たのか教えていただけないでしょうか?
No.2
- 回答日時:
makinko0129さん
bean.getSexをXと略しますね。
まず書かれたif文
if (X != null || X.equals("1") ) {(※1)
というif文の条件としている論理式ですが、
「Xがnullではない、『または』、Xが"1"と等しい」ならば真(true)となります。
Javaでは2項論理演算子(||、&&)は、常に左辺を評価してから、その結果で演算子の演算結果が確定するならば右辺を評価せず、確定しないならば右辺を評価する動作が仕様となっています。
すなわち「A || B」は、まず「A」を評価します。Aが真(true)ならば、Bが真であろうと偽であろうと「A || B」は真になりますので、Bの評価は行いません。Aが偽(false)ならば、Bの真偽がわからないと「A || B」全体が確定しないため、Bを評価します。
「A || B」は、「AまたはBである」が直訳ですが、この動作を勘案すると「Aである、そうでない場合は、Bである」と意訳するのが適切かもしれませんね。
ちなみに「A && B」も、まず「A」を評価します。こちらはAが偽(false)ならば、Bが真であろうと偽であろうと「A || B」は偽になりますので、Bの評価は行いません。逆にAが真(true)ならば、Bの真偽がわからないと「A || B」全体が確定しないため、Bを評価します。
「A && B」は、「AかつBである」が直訳ですが、この動作を勘案すると「Aである、その上でBである」と意訳するのが適切かもしれませんね。
では、もとにif文にもどると、(※1)は、まず「Xがnullではない」を評価します。もし、それが真ならば「Xが"1"と等しい」を評価しません。もし、それが偽-すなわち「Xがnullである」ならば、「Xが"1"と等しい」を評価しようとします。ところが、「Xがnullである」にも関わらず、Xのequalsメソッドを呼んでしまっているため、NullPointerExceptionが発生しました。
さて、northcurlcurlさんの回答ですが、よーく、if文を見てください。
if (X == null || X.equals("1") ) {
若干異なりますね。なぜ、NullPointerExceptionが発生しなかった理由は考えてみてください。
とりあえず、先ほどに意訳にあてはめると「Xがnullである、そうでない場合は、Xが"1"と等しい」。
もうお分かりですね。
この回答への補足
run34ricky様、今回は私のためにこのような親切な回答をしてくださりありがとうございました。面識のない私のために時間を費やしてくださったことに感謝します。
さて、問題のNullPointerExceptionなのですが、いまだ解答が見つからぬままです。
northcurlcurl様が指摘してくださった部分であろう、if (X != null || X.equals("1") ) の部分ですが、そこは前回のときif (X == null || X.equals("1") ) に修正しました。それでもNullPointerExceptionがでるのです。「nullじゃない」から「nullである」に変更する部分以外、run34ricky様の回答を何度読み返しても見つけることができませんでした。
もしよければそれ以外に変更する点あればご教示していただきたく思います<(_ _)>
No.1
- 回答日時:
下記のプログラムを試してみれば、分かるでしょう。
import java.io.*;
public class test{
private static String sex;
public static String getSex() {return sex;}
public static void main(String[] args) {
if(getSex() == null || getSex().equals("0"))
System.out.println("checked");
}
}
この回答への補足
お忙しい中ありがとうございます。
早速上記のコードを実行してみたらきちんと「checked」とコマンドプロンプトには表示されました。
うーん、どこがいけないのかわかりませんでした。JSPのコードは
<input type="radio" name="sex" value="0" <% if(bean.getSex() == null || bean.getSex().equals("0")){%><%=c%><%}%>>男
で、<%=c%>のcの中にはString型でcheckedをいれています。あと最初は「nullじゃなかったら」という条件にしていたのですが、northcurlcurl様の仰る通り「nullだったら」という条件にすべきでしたので、訂正しました。
それでも同じエラーがでるのです。
ビーンクラスでは
・public void setSex(HttpServletRequest req)
{sex=req.getParameter("sex");}
・public String getSex()
{return sex;}
というメソッドを2つ用意していて、JSPで値を入力して確認ボタンを押すと一旦サーブレットのほうに遷移します。そこでsetSexをよびだし、ビーンごとセッションに関連付けています。そして確認画面のJSPに移るようにしています。
どこが問題なのかまだわからないので、お手数だとは思いますがもう少しヒントのほうお願いします<(_ _)>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- PHP php 確認表示画面で値をSESSIONから取り出す理由の解釈は正しいでしょうか? 1 2023/06/09 17:39
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- PHP php 入力画面から確認表示画面へ情報の受け渡しについて。 1 2023/06/07 18:00
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ORA-01858: 数値を指定する箇所...
-
BOOL値を逆にしたい
-
getStringの値がNULLの時の処理
-
Safari ダウンロード時に日本語...
-
C# ListBoxのインデックスの値...
-
Java配列でNullPointerExceptio...
-
逆コンパイルの見方について(...
-
配列にnullを代入すると、null...
-
java DAO 日付指定フォーマット...
-
HashMapで要素を指定から削除
-
例外でBeanUtils.populateが、...
-
jsp/Servletの動的に増えるフォ...
-
JSPでの画面表示の方法
-
java 引数 戻り値のあるメソッド
-
eclipseでoracle接続時のエラー...
-
gas カレンダー祭日設定でエラー
-
javaの掲示板について
-
System.err. printlnとSystem.o...
-
Javaで改行などが出来ないのです。
-
JSPやサーブレットでSystem.out...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列にnullを代入すると、null...
-
ORA-01858: 数値を指定する箇所...
-
Java配列でNullPointerExceptio...
-
getStringの値がNULLの時の処理
-
BOOL値を逆にしたい
-
C# ListBoxのインデックスの値...
-
eclipseでoracle接続時のエラー...
-
gas カレンダー祭日設定でエラー
-
Javascript エラーメッセージが...
-
Stringを返す getText()メソッ...
-
JSPで複数のSQL実行につ...
-
jsp/Servletの動的に増えるフォ...
-
JSPでの画面表示の方法
-
例外でBeanUtils.populateが、...
-
C#でラジオボタンとコンボボッ...
-
Safari ダウンロード時に日本語...
-
java 引数 戻り値のあるメソッド
-
HashMapがおかしい
-
逆コンパイルの見方について(...
-
JavaScriptのnullはいつ使う?
おすすめ情報