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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

231閲覧

functionの配列変数をpostしたい

takoyaking

総合スコア19

Java

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/07/18 07:42

前提・実現したいこと

functionにある配列(hairetu)をpostしてサーブレットに送りたい

発生している問題・エラーメッセージ

NullPointerException

該当のソースコード

java

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8"> 7<title>午前回答入力</title> 8<script type="text/javascript"> 9 function hairetu(var select){ 10 var hairetu; 11 hairetu.push(select); 12 } 13</script> 14</head> 15<body> 16 <h1>午前回答</h1> 17 <FORM method="POST" action="AmPrint" name = "amanswer"> 18 <% for(int i = 0; i < 80; i++) { %> 19 <%= "問" + (i+1) %> 20 <select name="gozen"> 21 <option onclick = hairetu("ア"); value="ア"></option> 22 <option onclick = hairetu("イ"); value="イ"></option> 23 <option onclick = hairetu("ウ"); value="ウ"></option> 24 <option onclick = hairetu("エ"); value="エ"></option> 25 </select> 26 <br> 27 <% } %> 28 <INPUT type="submit" value="次へ"> 29 </FORM> 30</body> 31</html>

java

1package pack; 2 3import java.io.IOException; 4import java.io.PrintWriter; 5 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/** 13 * Servlet implementation class AmPrint 14 */ 15@WebServlet("/AmPrint") 16public class AmPrint extends HttpServlet { 17 private static final long serialVersionUID = 1L; 18 private PrintWriter out; 19 20 /** 21 * @see HttpServlet#HttpServlet() 22 */ 23 public AmPrint() { 24 super(); 25 // TODO Auto-generated constructor stub 26 } 27 28 /** 29 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 30 */ 31 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 32 // TODO Auto-generated method stub 33 response.getWriter().append("Served at: ").append(request.getContextPath()); 34 } 35 36 /** 37 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 38 */ 39 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 40 // TODO Auto-generated method stub 41 doGet(request, response); 42 43 //response.setContentType("text/html; charset=UTF-8"); 44 //out.println("<html><head></head><body>"); 45 try { 46 String am[] = request.getParameterValues("hairetu"); 47 for(int i = 0; i < 80; i++) { 48 49 50 System.out.println(am[i]); 51 52 } 53 54 //out.println("</body></html>"); 55 56 }catch(Exception e) { 57 e.printStackTrace(); 58 } 59 60 } 61} 62

試したこと

hairetu()hairetu;

補足情報(FW/ツールのバージョンなど)

Eclipse(Photon)

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

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

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

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

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

m.ts10806

2019/07/18 08:22

起きている問題、質問は何でしょうか
takoyaking

2019/07/19 00:30

発生している問題はNullPointerExceptionです。サーブレットに変数を渡せていないと思うのでコード上にあるhairetu変数をサーブレットに送るやり方を教えてもらいたいです。
m.ts10806

2019/07/19 00:31

質問本文に追記してください。(エラーはそのままご提示ください)
guest

回答2

0

ベストアンサー

幾つか問題があります。

1つめ

下記ではhairetu()関数内で変数hairetuが定義されるため、
毎回空の変数にpushしていることになります。

js

1<script type="text/javascript"> 2 function hairetu(var select){ 3 var hairetu; 4 hairetu.push(select); 5 } 6</script>

2つめ

formで送信するのはあくまで<form>内にある入力コントロール(input,textarea,select,button)なので幾らJavaScriptの変数に詰め込んでも送信はしません。

故に、request.getParameterValues("hairetu")としても送られてくるデータがないのでNullです。

3つめ

forで80個select を作っているようですが、nameが同じであるため、一番最後の要素の値しか送られません(ラジオボタンを想像してみると良いです。同じnameで選択して、1個しか送れませんよね)

ではどうするか

既に出ている方法でも対応は可能です。
別の方法もありますが、いずれにしてもJavaScriptで作った配列を送信ということはしません
(hidden設けてやる方法もあるけど回りくどいし、受け取った側でも加工が必要)

簡単なのはname自体を配列にする方法です。

html

1 <% for(int i = 1; i <= 80; i++) { %> 2 <%= "問" + i %> 3 <select name="gozen[<%=i%>]"> 4 <option value=""></option> 5 <option value=""></option> 6 <option value=""></option> 7 <option value=""></option> 8 </select> 9 <br> 10 <% } %> 11

チェックボックスで見たことがあると思います。

あとはチェックボックスの値を取り出すときと同じようにすればいけるはずです。
整合性とらせるためにキーにiを入れたので、キー=問番号と合うはず。

投稿2019/07/19 00:44

編集2019/07/19 01:35
m.ts10806

総合スコア80850

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

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

takoyaking

2019/07/19 01:32

分かりやすく指摘、解説ありがとうございます。参考にしつつ実行してみたいと思います。
m.ts10806

2019/07/19 01:34

iそのまま入れたら0なので+1しないといけませんね。 でも+1は煩わしいので下記の方が良いです <% for(int i = 1; i <= 80; i++) { %>
m.ts10806

2019/07/19 01:35

上記で最後のコード修正しました。
guest

0

NullPointerExceptionが発生している場所も書いていただけると理解しやすいです.

submitでPOSTされる値はFormタグの中のinputやセレクトです.
selectを全てformに異なるnameとして含め,それを取得してはいかがでしょうか.
※ 手元に確認環境がないので動作確認はできていません.

HTML

1<% for(int i = 0; i < 80; i++) { %> 2 <%= "問" + (i+1) %> 3 <select name="gozen<%= (i+1) %>"> 4 <option value="ア">ア</option> 5 <option value="イ">イ</option> 6 <option value="ウ">ウ</option> 7 <option value="エ">エ</option> 8 </select> 9<% } %>

Java

1try { 2 for(int i = 0; i < 80; i++) { 3 System.out.println(request.getParameter("gozen"+i)); 4 } 5 } 6}

投稿2019/07/18 12:59

rcftdbeu

総合スコア167

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

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

takoyaking

2019/07/19 01:06

実行した結果できました!ありがとうございました。 javascriptは使わないは使わない方がよいのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問