- PR -

チェックボックスとラジオボタンが複合する場合のパラメータ

1
投稿者投稿内容
やまと
常連さん
会議室デビュー日: 2004/02/20
投稿数: 25
投稿日時: 2004-03-25 20:34
いつもお世話になっています。

以下のことが出来なくて困っています。
(不躾ですみませんが、説明文を書くより図で書いてみます。

webページになりますが、こんな感じの画面です。

              radiobutton
               ↓ ↓
------------------------------------------
|チェックボックス|大会日|参加する|参加しない|
------------------------------------------
|     ■  |0301 | ●  |  ○ |
------------------------------------------
|     ■  |0302 | ●  |  ○ |
------------------------------------------
|     □  |0303 | ○  |  ● |
------------------------------------------
|     □  |0304 | ●  |  ○ |
------------------------------------------
|     □  |0305 | ○  |  ● |
------------------------------------------

                   ------
                   |登録|
                   ------
登録ボタンを押下した時、
受け取りたいパラメータとして、
@大会日付
Aradiobuttonの値
です。

チェックしたレコードのみ受け取りたいのです。
しかし、各レコードのradiobuttonのNAME属性をユニークにしていますので、
受取側では、上記の場合

@大会日付:0301、0302
Aradiobuttonの値:0(0303分)、0(0305分)、1(0301分)、1(0304分)、1(0302分)

です。@、Aとも順不同で送られてくることは知っているのですが、
そもそも、チェックした数=2に対して、radiobuttonの値の数=5
というのが、困っています。

しかし、この画面構成は変えれません。

理想としては、
@大会日付:0301、0302
Aradiobuttonの値:1(0301分)、1(0302分)

です。

どうすればいいのしょうか。
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2004-03-25 21:21
チェックされているレコードのラジオボタンの情報のみPOSTする
ブラウザを作ればいいじゃん。

というのは極論ですが、POSTされるデータをどうこうするより、
送られてくるデータをうまく処理することを考える方がいいのでは?
それがいやなら Web じゃなくってクライアントサーバ型でやった方が
ムリがなくていいでしょう。

私であれば、チェックボックスとラジオボタンの値に相関性を持たせて、
リクエストを処理するサーブレット等でチェックされているレコードの
ラジオボタンの値、というものを判別します。

どうしても余計なデータは送信したくないのであれば、JavaScript
で、登録ボタンクリック時に、必要なデータだけでリクエストパラメータ
を作成して、GETするか、FORM の hidden にうめこんでPOSTするという
無理矢理な方法があります。私ならやりませんが。
やまと
常連さん
会議室デビュー日: 2004/02/20
投稿数: 25
投稿日時: 2004-03-26 19:33
引用:

私であれば、チェックボックスとラジオボタンの値に相関性を持たせて、
リクエストを処理するサーブレット等でチェックされているレコードの
ラジオボタンの値、というものを判別します。



私もその方向で考えていきたいと思います。
考えとして

  1. @チェックボックスにチェックされた大会日付を取得
  2. A@で取得した大会日付を属性名として、ラジオボタンでチェックされたパラメータを取得

です。
しかし、
受取側のServletのgetParameterところでエラーになります。
エラーの箇所は分かったのですが、解決策が分かりません。
どなたか教えていただけないでしょうか。

エラー内容は
[CODE]
description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.NullPointerException
at sankaActual.UpSankaPersonServlet.doPost(UpSankaPersonServlet.java:59)
at sankaActual.UpSankaPersonServlet.doGet(UpSankaPersonServlet.java:31)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)

[CODE]
です。

以下は受取側のソースです。
【送り側JSP】
コード:
<FORM ACTION = "UpSankaPerson" METHD = "Post">
	<TR>
		<TD><INPUT TYPE ="checkbox" NAME="tntDate"  VALUE="<%=next.getTntDt()%>"></TD>

		<TD><INPUT TYPE="RADIO" Name = "<%=next.getTntDt()%>" VALUE = "1"></TD>
		<TD><INPUT TYPE="RADIO" Name = "<%=next.getTntDt()%>" VALUE = "0"></TD>	
	</TR>
	<TR>
		<TD><INPUT TYPE ="checkbox" NAME="tntDate"  VALUE="<%=next.getTntDt()%>"></TD>

		<TD><INPUT TYPE="RADIO" Name = "<%=next.getTntDt()%>" VALUE = "1"></TD>
		<TD><INPUT TYPE="RADIO" Name = "<%=next.getTntDt()%>" VALUE = "0"></TD>	
	</TR>




【受取側Servlet】
コード:
		String upListTntDate[] = request.getParameterValues("tntDate");
		String upListSankaFlg[] = null;
		String upListBackNumber = request.getParameter("backNumber");
		
		for(int i=0;i < upListTntDate.length; i++ ){
			out.println("<li>tntDate =" +  upListTntDate[i]);
			
			upListSankaFlg[i] = request.getParameter(upListTntDate[i]);←ここでエラーになっています。
			out.println("<li>upListSankaFlg =" +  upListSankaFlg[i]);
		}


でくのぼう
大ベテラン
会議室デビュー日: 2003/10/06
投稿数: 162
投稿日時: 2004-03-26 20:29
null になりそうなものを、軒並み System.out.println() してみてはどうですか?
こんなデバッグ、人に押し付けちゃ駄目ですよ・・・。
やまと
常連さん
会議室デビュー日: 2004/02/20
投稿数: 25
投稿日時: 2004-03-26 20:37
みなさん、失礼しました。
引用:

null になりそうなものを、軒並み System.out.println() してみてはどうですか?
こんなデバッグ、人に押し付けちゃ駄目ですよ・・・。



すべて出してみたんです。で、
upListSankaFlg[i] = request.getParameter(upListTntDate[i]);←ここでエラーになっています。
と判断したんですが。

でくのぼうさんが言う通りかもしれませんが、どうしても分かりません。
もう少し詳しく教えていただけないでしょうか?

でくのぼう
大ベテラン
会議室デビュー日: 2003/10/06
投稿数: 162
投稿日時: 2004-03-26 20:43
なんだか切羽詰っておられそうなので、サクッと回答します。

コード:
String upListSankaFlg[] = null;



ここが変です。
null を指してる配列に値を入れようとしてます。
やまと
常連さん
会議室デビュー日: 2004/02/20
投稿数: 25
投稿日時: 2004-03-26 20:56
でくのぼうさん、解決しました。
大変ありがとうございます。

受取側のServletを
コード:
String upListTntDate[] = request.getParameterValues("tntDate");
String upListSankaFlg[] = new String[upListTntDate.length];


に修正しました。
これでnullを指す配列ではなくなりました。

ということですよね。
また、勉強になりました。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)