【初月無料キャンペーン中】gooドクター

いつもお世話になっております。
サーブレット&JSPでプログラミングの勉強をしています。

JSPでリストボックスを表示させる際に、リストのアイテムをハードコーディングではなく、DBから取得したデータをArrayList等に格納し、表示させたいと思っています。

この場合、ループでArrayListのアイテムを1件ずつ取り出して、JSP内の<select><option></option></select>に当て込む方法が良いのでしょうか?

ちなみに以下のテーブル内容で、リストボックスには“作業内容”を表示させて、選択されたときには、“作業コード”を取得させたいのですが、どのようにすれば良いでしょうか?

テーブル
--------------------
作業コード|作業内容
--------------------
0000000001|プログラミング
0000000002|実装
0000000003|テスト

よろしくお願いします。

gooドクター

A 回答 (4件)

<select>


<option value="0000000001">プログラミング</option>
<option value="0000000002">実装</option>
<option value="0000000003">テスト</option>
</select>

↑こういう状態を作れば、見た目には内容が、値には番号が入ります。

あとは単純にぐるぐるまわせばいいだけですね。

<select name=hoge>
<%for(i=0;i<arrayA.length();i++){%>
<option value="<%=arrayA[i]>">arrayB[i]</option>
<%}%>
</select>

スクリプトで
form.hoge[i].value = <%=arrayA[i]%>;
form.hoge[i].text = <%=arrayB[i]%>;
とかで埋め込むこともできます。
内容を書き換えたりすることがあるのなら、スクリプトを併用したほうが良いですね。
    • good
    • 1
この回答へのお礼

ryou0607さん、ご回答ありがとうございます。

上の例はとてもよく分かりました。
スクリプトのほうは、残念ながらよく分かりませんでした。

お礼日時:2004/11/30 22:48

>>そのあとtempに“プログラミング”を代入してループを抜ける



そのとおりです。一般的には、ループを抜けたあとに最後の文字列をもう一度関数A()に渡しますね。
    • good
    • 1
この回答へのお礼

色々アドバイス頂きありがとうございました。
大変分かりやすかったです。

お礼日時:2004/12/02 14:48

valueの値がServletに渡されるので、Servletで処理すればよいです。



<option value="0000000001,プログラミング">プログラミング</option>

↑これが選択されているときにsubmit()された場合、request.getParameter("hoge")の内容は"0000000001,プログラミング"になります。様々な情報をカンマで区切って格納して送信することはよくありますよ。
受け取ったServlet内で
int index = 0;
String temp = request.getParameter("hoge");
while(temp.indexOf(",")!=-1){
index=temp.indexOf(",");
関数A(temp.substring(0,index));
temp=temp.substring(index+1,temp.length());
}
で、関数Aにカンマ区切りの文字列を次々と渡したり。

どんな文字列でも送信することはできるので、あとはServletの処理しだいです。色々やってみてください。
ただ、Servlet/JSPを動かすときはJScriptを使う場合が多い(今のところ使わないシステムに出会ったことがない)ですので、JScript・html・Servlet/JSPの連携はできるようになっておいた方が良いです。
    • good
    • 2
この回答へのお礼

丁寧な解説ありがとうございます。

サンプルの内容だとwhileの中で、関数Aに“0000000001”を引数として渡して、
そのあとtempに“プログラミング”を代入してループを抜ける
という理解で合っていますでしょうか?

お礼日時:2004/12/02 01:30

おそらく、JavaではなくJScriptの方がわからないってことですよね。



Java(JSPスクリプト)記述部において
arrayAの中身が{01,02,03}
arrayBの中身が{プログラミング、実装、テスト}
だとすると、

function func(){
form.hoge.length = 0;
<%for(i=0;i<arrayA.length();i++){%>
form.hoge[<%=i%>].value = '<%=arrayA[i]%>';
form.hoge[<%=i%>].text = '<%=arrayB[i]%>';
<%}%>
}

↑ここから生成されるhtmlは

function func(){
form.hoge.length = 0;
form.hoge[0].value = '01';
form.hoge[0].text = 'プログラミング';
form.hoge[1].value = '02';
form.hoge[1].text = '実装';
form.hoge[2].value = '03';
form.hoge[2].text = 'テスト';
}

↑こうなります。

form.hoge.length = 0;の部分でselectを初期化して、
valueに値を、textに表示文字列を埋め込んでいます。
body.onload時などにこういった関数を呼ぶこともありますし、別フレームに対して値を飛ばすときなどに重宝します。
    • good
    • 0
この回答へのお礼

ryou0607さん、ありがとうございます。

現在、JavaScriptには触れずにサーブレット&JSPを学んでいるため、せっかく詳しい説明をして頂いたのに中々理解できません。
もう少し勉強してからJavaScriptも手を付けたいと思います。

もうひとつ疑問が出てきました。
見た目には内容、そして値には番号と内容の両方を入れて、値を取得したらsubstringメソッドで
分割してそれぞれ使用しようと思っているのですが、これって大丈夫な方法なんでしょうか?

何度もすみません

お礼日時:2004/12/01 17:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング