プロが教えるわが家の防犯対策術!

Formの<SELECT>について教えて下さい。

リストの内容はデータベースからjavaで取得し、Bという名前のArrayListに格納。それをフォームのセレクトボックスでjspで取得し表示しています。
やりたい事は、java側でAの名前でセットしたデータがBにあれば、セレクトボックスで選択した状態にしたいのですが、どうしてもうまくいきません。

以下のコードだと if (A.equals(B)) のところがおかしいようで、試しに if(A.equals("りんご"))の様にデータ名を明示的に書くとうまくいきます。
しかしそうすると今度は、セレクトボックスで"りんご"が選択された時にすべてのデータに selected が入り、セレクトボックスの最後のデータが選択状態になります。
悪いところだらけのコードのようです…。

すみませんがご教授お願い致します。

<%
 //キー Aで設定したデータを取得
String A = (String)request.getAttribute("A");
%>

<%
 //ArrayListに入っているデータをループで取得
 for (int i = 0; i < al.size(); i++) {

  HashMap hash = (HashMap)(al.get(i));
  String B = (String)hash.get("B");
%>

<option

<%
  //Bの値がAと同じであれば選択状態にする。
if (A.equals(B)) {
%>
selected
<%
}
%>
  value = <%= (String)hash.get("B") %>><%= (String)hash.get("B") %>

<%
}
%>

A 回答 (2件)

見たところ、特に問題はないように思えます。


equalsで比較することが悪いということはないので、
やはりAとBの値が異なるんじゃないかと思いますが…
よーく見るとどっちかがtrimかかってなくて
後ろにスペースがあったとか。。。。

あと質問に関係ないですが、AとBを取るときに
nullが来る考慮がないのが気になりました。
(質問用だから入れてないだけなのかな?)

この回答への補足

先程家で簡単なプログラムで試してみたところ、やはりスペースが邪魔をしていたようです。
スペースが入っていた原因は、DBでのデータ型がchar(20)型で設定されていたためと思われます。
今までchar型での仕様ではつくったことがなかったため、全く気がつきませんでした。
なんとか明日うまくつくれそうです。
ありがとうございました。

補足日時:2005/11/01 01:36
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

スペース、ですね。
そう言われてみると、表示されたWebページを「ソースを表示」で見た時、HashMapから取得されたデータの部分が<りんご >というような感じになっていたのを見たような気がします。
今環境がないため、明日さっそく試してみたいと思います。
でもソース自体に問題はなさそう、という事で安心しました。
またご報告させていただきます。

※AとBのnull値の場合は、質問には記述しておりませんでした。ありがとうございました。        

お礼日時:2005/10/31 23:05

>やりたい事は、java側でAの名前でセットしたデータがBにあれば、セレクトボックスで選択した状態にしたいのですが、


>どうしてもうまくいきません。

どのようにうまくいかないのかわからないので何とも言えませんが、
単純にArrayListのデータがおかしいのではありませんか?
SELECT部分は問題ないように見えます。

>以下のコードだと if (A.equals(B)) のところがおかしいようで、試しに if(A.equals("りんご"))の様に
>データ名を明示的に書くとうまくいきます。
>しかしそうすると今度は、セレクトボックスで"りんご"が選択された時にすべてのデータに selected が入り、
>セレクトボックスの最後のデータが選択状態になります。

Aの値が"りんご"だったら当然そうなるでしょうね。

>value = <%= (String)hash.get("B") %>><%= (String)hash.get("B") %>

value = <%= B %> > <%= B %> でいいのでは?
わざわざ複雑なコードにすることもないでしょう。

この回答への補足

ご回答ありがとうございます。

まず、
>value = <%= (String)hash.get("B") %>><%= (String)hash.get("B") %>

>value = <%= B %> > <%= B %> でいいのでは?
>わざわざ複雑なコードにすることもないでしょう。

ここは確かにそのとおりですね。
あまりこの部分には重点をおいていなかったので…。

ArrayListのデータはおかしくないようです。
value値のところでは期待通りの値が取得できています。
同じデータの取り方で、なぜ if (A.equals(B))がとれないかが分かりません。
Aの値もBの値も、Stringになっているのですが、equals では比較の仕方が悪いのでしょうか?
if(A.equals("りんご")) のように比較オブジェクトを明示的にかくと、比較はできるのですが、そのあたりの事でお分かりでしたら、どうぞよろしくお願い致します。

補足日時:2005/10/31 21:55
    • good
    • 0

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

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


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