• ベストアンサー

java / jsp selectedについて

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") %> <% } %>

質問者が選んだベストアンサー

  • ベストアンサー
  • osumitan
  • ベストアンサー率33% (102/307)
回答No.2

見たところ、特に問題はないように思えます。 equalsで比較することが悪いということはないので、 やはりAとBの値が異なるんじゃないかと思いますが… よーく見るとどっちかがtrimかかってなくて 後ろにスペースがあったとか。。。。 あと質問に関係ないですが、AとBを取るときに nullが来る考慮がないのが気になりました。 (質問用だから入れてないだけなのかな?)

akira_0201
質問者

お礼

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

akira_0201
質問者

補足

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

その他の回答 (1)

  • gimmick
  • ベストアンサー率49% (134/270)
回答No.1

>やりたい事は、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 %> でいいのでは? わざわざ複雑なコードにすることもないでしょう。

akira_0201
質問者

補足

ご回答ありがとうございます。 まず、 >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("りんご")) のように比較オブジェクトを明示的にかくと、比較はできるのですが、そのあたりの事でお分かりでしたら、どうぞよろしくお願い致します。

関連するQ&A