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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

3回答

19453閲覧

Javaでrequest.getParameterがnullになる

Chandler_Bing

総合スコア673

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2019/04/03 14:20

AjaxでJavaサーブレットに飛んでいくファンクションです。動作は問題ありません。
question_idにはint型で数字が入っています。(intである事は確認済み)

JS

1 function getCorrectAnswer(question_id) { 2 return $.post('AjaxController', { 3 question_id: question_id 4 }) 5 }

こちらがそのAjaxを受けるサーブレットです。

Java

1String question_id = request.getParameter("question_id"); 2System.out.println("question_idは" + question_id);//nullになる 3 4if (question_id != null) { 5String CorrectAnswer = jqd.getCorrectAnswer(question_id); 6System.out.println("CorrectAnswerは" + CorrectAnswer); 7out.print(CorrectAnswer); 8}

これでなぜデータを受け取れませんか。(JS内でdoneでデータを受け取っていますが、それがnullになります)
以下試したことです。

jQueryから送るデータをStringにする
question_idのアンダーバーが問題かと思い単にidに変更

仮にファンクションを以下に変更(仮の値を送る)

js

1 function getCorrectAnswer(question_id) { 2 return $.post('AjaxController', { 3 question_id:'2' 4 }) 5 }

結果は全てnullになります。

以下同プロジェクト内の成功例を貼っておきます。

JS

1 function getQuizzes() { 2 return $.post('AjaxController', { 3 action: 'getQuizzes' 4 }) 5 }

Java

1String action = request.getParameter("action"); 2if (action.equals("getQuizzes")) { 3String json = mapper.writeValueAsString(jqd.getgetQuizzes());//4つのクイズのオブジェクトがJSONとして入っている 4out.print(json); 5}

どうかご教授お願いします。

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

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

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

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

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

guest

回答3

0

Your post was quite helpful in helping me solve my octordle problem, and I consider it to be one of the greatest papers I have ever read.

投稿2023/07/18 03:55

fondemi

総合スコア20

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

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

0

ベストアンサー

記載されているコードのみであれば、ほぼほぼ合っています。
情報量が少ないため、重箱の隅をつつくしかないです。

1件気になるのは、getCorrectAnswer() の処理末尾にセミコロン「;」が無いことです。

Javascript

1 function getCorrectAnswer(question_id) { 2 return $.post('AjaxController', { 3 question_id:'2' 4 }); 5 }

のように記載してください。
JavaScriptでは末尾のセミコロンは省略可能ですが、省略した場合の解釈はJavaScriptの解釈に任せられます。今回、可能性は低いと思いますが、getCorrectAnswer() の呼び出し側の記載によっては、プログラマが解釈したのと別な解釈がされます。
セミコロンを省略した場合の作用を全て把握しているなら省略しても構わないと思いますが、ここで質問を投げかかているうちは省略しない方が良いでしょう。

あと、

JavaScriptの getCorrectAnswer() メソッドの1行目に
alert(question_id);

こちらは試されましたでしょうか?
これは、question_id の値を調べるだけでなく、alert が表示されなかった場合は、このメソッドが呼び出されていないことを意味します。
JavaScriptでは、呼び出しているすべての.jsファイルにおいて同名のメソッドが存在すると、片方のメソッドは後にロードされたメソッドで上書きされます。(そうならないように記載もできますが。)
もし、引数の違いも含め、getCorrectAnswer() が2つあり、両方ともconsole.log()を実装していた場合、alert が表示されていなければ、それに気づくはずです。
(これも可能性としては低いと思いますが、・・・)

あと、サーブレットの doPost のはじめに、このコードを追加してみてください。

Java

1Map<String, String[]> paramMap = request.getParameterMap(); 2 3System.out.println("param count: " + Integer.toString(paramMap.size())); 4for (String key : paramMap.keySet()) { 5 String[] values = paramMap.get(key); 6 System.out.println( 7 String.format("%s ===> %s", 8 key, 9 (values != null ? String.join(", ", values): "") 10 ) 11 ); 12}

これで、コンソールに、サーブレットで受け取ったパラメーターの数と全てのパラメーターが表示されます。これを見て、解決の糸口になるかもしれません。
action ===> getQuizzes
と表示されたら、JavaScriptで呼び出しているメソッドが間違っている。・・・など。

また、JavaScript の外部ライブラリを使用している場合は、パラメーター名にアンダースコア「」を使用するのは避けた方が良いかもしれません。
(アンダースコア「
」をハイフン「-」と同義と解釈するライブラリが存在します。)
これで解決しない場合は、「question_id」を「questionId」などに変更することも検討してみてください。

投稿2019/04/13 03:26

em334

総合スコア24

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

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

Chandler_Bing

2019/06/13 08:47

お久しぶりです。結局Javaサーブレットで意図していたif文が呼ばれていないことが原因でした。 返信が遅れてしまいすみません。
guest

0

JavaScriptで、getQuizzes を呼び出している箇所の誤りがあるのではないでしょうか。

例えば、

JavaScript

1function getQuizzes(question_id) { 2 return $.post('AjaxController', { 3 'question_id' : question_id 4 }) 5}

に対し、

JavaScript

1getQuizzes().done(function(quizzes) { 2 console.log(quizzes); 3});

で呼び出した場合、getQuizzesに指定した引数がないので、question_id は 未定義の状態となり、post内の第2引数に指定している question_id は 未定義となるので送信パラメータに含まれず、サーブレットで取得できません。

投稿2019/04/03 15:21

A-pZ

総合スコア12011

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

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

Chandler_Bing

2019/04/03 15:48

いつもありがとうございます。 getQuiz は引数なしで問題ないです。 問題はgetCorrectAnswerで 引数を受ける方がこちらです。、このメソッドを呼び出した際にもコンソールログで確認しましたが、きちんとintで数値が出ましたので、 このメソッドを呼び出した際、このメソッド内に数値が渡っていることは保証されております。
退会済みユーザー

退会済みユーザー

2019/04/03 23:24

(試せることを試さず、もしくは公開せずにまた質問してるのか。)
A-pZ

2019/04/04 05:27

@YutaNkai様 少なくとも作成されているJavaScriptやサーブレットの実装内容自体には誤りがありませんので、ここには書かれていない部分での誤りがあるのではないでしょうか。 例えば違うサーブレットを呼び出している。違うメソッドに実装しているなど。
em334

2019/04/04 12:35

JavaScriptの getCorrectAnswer() メソッドの1行目に alert(question_id); と書いて実行してみてください。 「null」や「undefined」と表示されたら、A-pZさんの回答を見直してください。
Chandler_Bing

2019/04/04 12:40

有難うございます。みなさま。 現在色々と立て込んでおりいつ試せるかわかりませんが、必ず試します。いつも有難うございます。
Chandler_Bing

2019/04/04 13:27

em334様 >JavaScriptの getCorrectAnswer() メソッドの1行目に alert(question_id); ここですがすでにalertではありませんがconsole.log(question_id)を試したところ きちんとint型で数字が入ってきております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問