| エンタープライズ:特集 | 2003/06/24 00:00:00 更新 |
JSPプログラミング入門
第3回:HTMLエンコードが必要なJSPプログラミングの基本 (4/5)
選択フィールド
選択フィールドである「<SELECT>〜<OPTION>〜</SELECT>」の処理は、「<SELECT>」タグ中にmultipleアトリビュートを指定せず、ユーザーが1つの項目しか選択できない場合には、ラジオボタンの処理と同じである。例えば、次のような3つの選択項目があるとする。
|
<SELECT name="selfield"> <OPTION value="value1">選択1</OPTION> <OPTION value="value2">選択2</OPTION> <OPTION value="value3">選択3</OPTION> </SELECT> |
この際、選択2が選択されていたとすると、「getParameter("selfield")」の値は「value2」となる。リスト7のようなラジオボタン処理と同じようにして、どの項目が選択されているかを判定できるわけだ。
| One Point: |
| 選択フィールドにおいて、ユーザーが何も選択していない場合、「getParameter("フィールド名")」の値がどのようになるかは、Webブラウザ依存である。Webブラウザによって、1番目の項目が選択されているように振る舞うものと、何も選択されていないように振る舞うものがある。何も選択されていないように処理されるWebブラウザの場合には、「getParameter("フィールド名")」値はnullとなる。ちなみにw3cのHTML仕様書によれば、何も選択されていない場合には、1番目の項目が標準選択されるのが正しい。 |
しかし、「<SELECT>」タグにmultipleアトリビュートを指定し、ユーザーが複数の項目を選択できるようにした場合には、「getParameter」メソッドを用いることはできない。例えば、次の「<SELECT>」タグがあるとする。
|
<SELECT name="selfield" multiple> <OPTION value="value1">選択1</OPTION> <OPTION value="value2">選択2</OPTION> <OPTION value="value3">選択3</OPTION> </SELECT> |
この場合、選択1と選択2が選択されていれば、「getParameter("selfield")」値は、先頭項目である選択1の「value」アトリビュートに設定されている「value1」しか返されない。つまり、選択2が選択されていることを知ることができないのだ。
そこで複数選択されている場合には、「getParameterValues」メソッドを用いればよい。「getParameterValues」メソッドは、複数項目が選択されている場合、これを配列として得るためのメソッドとして用意されている。
|
<% String values[] = getParameterValues("selfield") %> |
上記のように指定した場合、変数valuesには選択されたすべての項目のvalueアトリビュート値が配列として返される。選択1と選択2が選択されていれば、values[0]の値は「value1」、values[1]の値は「value2」のようになる。
| One Point: |
| 配列に設定される項目の順序は、Webブラウザに依存する。w3cの仕様書では、「登場順に設定する」ことを要求するが、これに則らないWebブラウザも存在する可能性がある。このため、getParameterValuesメソッドの戻り値は、順不同であると想定して扱ったほうが安全だ。 |
複数選択可能な場合には、例えば次に挙げるリスト8のように処理すればよい。
リスト8■複数選択を許す際の選択フィールド値を調べる例
1: <%
2: String values[] = request.getParameterValues("selfield");
3: if (values == null)
4: {
5: out.println("何も選択されていません");
6: }
7: else
8: {
9: for (int i = 0; i < values.length; i++)
10: {
11: String value = values[i];
12: if (value.compareTo("value1") == 0)
13: {
14: out.println("選択1が選択されています<BR>");
15: }
16: else if (value.compareTo("value2") == 0)
17: {
18: out.println("選択2が選択されています<BR>");
19: }
20: else if (value.compareTo("value3") == 0)
21: {
22: out.println("選択3がチェックされています<BR>");
23: }
24: }
25: }
26: %>
|
| One Point: |
| ちなみに、複数選択できないフィールドにおいては、getParameterValuesメソッドを使ってもよい。この場合、getParameterValuesメソッドの戻り値は、要素が1の配列が戻ってくるだけだ。 |
[大澤文孝,ITmedia]
