こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

配列宣言に変数を使えるのでしょうか?

いつもお世話になっております。先日(10/29)も、Javaの項で教えていただき、プログラムを進めていたのですが、配列のところでまた行き詰まってしまいました。どなたか教えていただけないでしょうか。
(データベースは MySQL を使っています)

out.println("<form name=\"hiro1\">");
out.println("<input type=\"radio\" name=\"hiro2\" value=\"A\" onClick=\"hiro3\">A   
<input type=\"radio\" name=\"hiro2\" value=\"B\" onClick=\"hiro3\">B");
out.println("<select name=\"hiro4\">");
out.println("</select>");
ResultSet rs1=st1.executeQuery("select hiro from hirotable");
While(rs1.next()){
String hirodata=rs1.getString(1);
out.println("<input type=\"hidden\" name=\"hiro5\"
value="+hirodata+">);

考え方としては、ラジオボタン(hiro2)のところで、A か B を選択(クリック)することによって、イベントを発生させ(ラジオボタンとセレクトメニューの値は直接には関係しません)、データベースから取得した値(変数 hirodata または hiro5)をファンクション(function hiro3)にもってゆき、そこでセレクトメニュー(hiro4)の値(変数 hirodata またはhiro5)を作ってセレクトメニューに入れたいと思うのです。(セレクトメニューの代わりにテキストボックスで試したら値がひとつ入力され、表示されました)セレクトメニューの場合は、配列が必要になると思いますが、ファンクションの上のところで配列の宣言をするときに、ひとつひとつ記述するのではなく、変数(hirodata または hiro5)を使うことは可能でしょうか?

投稿日時 - 2006-10-31 12:40:58

QNo.2508846

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

NTJ

そうですか・・・我流で習得、ということでしたら、少しヒントを。

ご存知かとは思いますが、JavaとJavaScriptは、「全く別のもの」です。
Javaは「サーバー側」で動きますが、JavaScriptは「ブラウザの中」で動きます。
従って、全体の処理では・・・
ユーザーから何かのリクエストが来る
 ↓
Javaのプログラムでリクエストの内容を判断する
 ↓
内容次第で、DBへの格納/DBからの抽出を行う
 ↓
抽出結果を、HTMLへ編集する
 ↓
ユーザーへ結果を返す
 ↓
ブラウザ上へ結果が反映され、必要に応じてJavaScriptを動作させる。

こういう流れの繰り返しになります。
 クライアント(ブラウザ)
 アプリケーションサーバー
 DBサーバー
という、三つの処理系で成り立っていますので、
これを「三層構造」と呼びます。
個々の処理系で、別々のプログラムを用意し、それぞれが連携して別個に動くと考えてください。この三者を混同すると、処理は上手く行きません。
特に、DBはサーバー上にあり、JavaScriptはブラウザ上で動作しますので、DBの検索結果を直接JavaScriptへ引き渡したり、その逆にJavaScriptから直接DBへ検索へ行ったりすることは出来ません。
このあたり、初心者さんは混同して混乱する場合が多いようです。


さて、ご質問の内容ですが、これは「サーバー側へ配置したJavaのソース」ですね。
この処理が実行された結果「出力される内容」が、HTMLとなり、その中へJavaScriptが埋め込まれている形になる筈です。
その出力側へ閉じた世界で、JavaScriptを考えてみてください。
DBの出力結果を表示したいのなら、先にDBの出力結果を全てJavaScriptの変数として出力しておく必要があります。
その記述を out.println で作るとすると、相当に煩雑な内容になってしまうと思います。
その辺りを一旦整理して、もういちど考えてみてくださいね。


ちなみに・・・目的は「SELECTメニューを作る」のではなく、「SLECTメニュー配下のOPTIONを変更する」のではないかと思います。
それは実はかなり面倒な仕事になります。
むしろ、2種のSELECTメニューを先に作っておき、一方は style="display:none;" を加えておいて、ラジオボタンのonClickからコールしたファンクションを
function hiro3(prm){
if(prm='A'){
document.getElementById('AAA').style.display='';
document.getElementById('BBB').style.display='none';
} else {
document.getElementById('AAA').style.display='none';
document.getElementById('BBB').style.display='';
}
と、してやれば、目的とおりの動作をしているように見えるかと思います。
この手法での切り替えは非常に高速なので、ユーザーのストレスも減るのでお奨めです。

投稿日時 - 2006-11-10 23:33:13

お礼

ありがとうございます。専門の方にご教示いただき光栄に思います。
おっしゃることで、理解できない箇所がいくつかあり、内容を吟味しています。(これは、自分が全体のしくみを把握していなからかと思うのですが)データベースのところでもつまづいておりますが、なんとか頑張って仕上げてゆきます。これからもよろしくお願い申し上げます。

投稿日時 - 2006-11-15 12:41:50

ANo.1

NTJ

これは・・・何のプログラミングなのでしょうか?
他のプログラムとJavaScriptの構文が、ごちゃまぜになっているように見受けられるのですが。

out.println("<input type=\"radio\" name=\"hiro2\" value=\"A\" onClick=\"hiro3\">A   
<input type=\"radio\" name=\"hiro2\" value=\"B\" onClick=\"hiro3\">B");
の出力結果は、
<input type="radio" name="hiro2" value="A" onClick="hiro3">A
<input type="radio" name="hiro2" value="B" onClick="hiro3">B
ですよね。
これでは、onClickのパラメータが hiro3 なので、「JavaScriptであれば」エラーになる筈です。
JavaScriptの構文であれば、onClick="hiro3()" の筈です。
(この構文は、VBScriptではないかと思われるのですが。)

まずは、お使いの処理系がどのようになっているのか、それを教えて下さい。

ちなみにJavaScriptでは、どんな配列でも自在に作れます。
配列のメンバーが数値や文字列・オブジェクトなど、バラバラに混在していても問題は起こりませんし、局所的に多重配列にしても大丈夫です。
逆にVBScriptの場合には、そのような事は出来なかったと思います。

投稿日時 - 2006-11-05 00:10:38

お礼

御回答、ありがとうございます。問い合わせにつきましては、プログラムではなく、考え方を変えて運用で対応しました。ご指摘の点につきましては、Java でプログラムを作っているのですが、ブラウザに表示させる部分については、Javascript の方が便利そうなので活用しました。処理系ということでは、プラン(アイデア)をインターネット上で形にすることを目的に我流で学んでいますので( VBScript という言葉も初めて聞くほどの初心者です)、自分でもかなりごちゃごちゃになってきていることを感じています。一度、整理して、NTJさんの内容について勉強し、考えます。いろいろありがとうございました。(回答が来ず、あきらめていたので、お礼が遅くなり申し訳ございませんでした)

投稿日時 - 2006-11-10 08:56:42

あなたにオススメの質問