• ベストアンサー

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

  • Java
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • 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

  • java → jsp コンボボックス表示について

    javaで取得したコードが 002があるとします。 DBにコード001 002 003 004 と入っているとして、 (ArrayListで取得済み デフォルトが001になる状態で表示確認済み) jspで表示させる際、selectedが002 に自動的になり、コンボボックスで表示させることは可能ですか? ※AからBへ遷移するとして 整理すれば Aの画面で 選択されたコード002 を Bの画面のコンボボックスで selected を002にする。 現在のコード <%for (int i = 0; i < CdOnlyList.size(); i++) {%> <option value="<%=CdOnlyList.get(i)%>"><%=CdOnlyList.get(i)%></option> <%}%>

  • お世話になります。下記のjavaの総称を詳しい方がいらっしゃいましたら

    お世話になります。下記のjavaの総称を詳しい方がいらっしゃいましたら、ぜひ教えてお願いします。 Class A{ private HashMap dataTable; private void a1(){ ArrayList its = (ArrayList)(dataTable.get(key1)); if (its==null){ its = new ArrayList(); its.add(new B) } ... dataTable.put(key1,its); } private void b1(){ ArrayList its = (ArrayList)(dataTable.get(key3)); if (its==null){ its = new ArrayList(); its.add(new C()) } ... dataTable.put(key4,its); } } B、Cはぞれぞれ違うObjectです。 JDK5をアップすると、HashMap,ArrayListの無検査呼びコンパイラ警告があって、総称に改修したいですが、改修するやり方をご存知の方がいらっしゃいましたら、ぜひ教えてくださいまして、非常に助かります。

  • JSP内で可変するチェックボックスの選択数を数える

    下記のソースのように数が変化するチェックボックスに各name属性が 割り当てられている場合、JavaScriptでチェックボックスの数を数える 際にfor文を使用したいのですが for (var i = 0 ; i <= ????? ; i++ ) の?????の部分はどのように記述すればよいのでしょうか (チェックボックスの数がいくつあるかをどのように表すのか) <% for(int i = 0; i < list.size(); i++ ) { ArrayList data = (ArrayList) list.get(i); %> <tr class="listTr"> <td class="<%= data.get(8) %>" id="set11"> <% if(data.get(0).equals("1")) { out.println("<input type='checkbox' name='output" + i + "' value='1' "' checked>"); } else { out.println("<input type='checkbox' name='output" + i + "' value='1' "'>"); } %>

  • JAVAでの定数追加

    定数1~定数100が定義されておりクラス(メソッド)内に定数を使用したif文が複数存在するとします。 ※if文の条件は定数(文字列)のstartWithによる比較 定数101を追加する場合に定数定義+if文の条件を追加しなければならないのですが、 定数定義のみで対応できるようにするにはどうすればよいでしょうか? 以下を考えてみましたが(不可もありますが・・・)もっと良い方法はありますでしょうか? 案1)×   Mapを使用。getする際にstartWithであるためできないことが判明。(equalsの比較なら可能)   private final static Map map = new HashMap(){    put("a1","");    put("a2","");       :    put("a101","");   } 案2)△  ArrayListを使用。   private final static List list = new ArrayList(){    add("a1");      :    add("a101");   }  メソッド内でfor文を使用するため性能的に落ちる?  for(int i=0;i<list.size();i++){   String str = "aaa";   if(list.get(i).startWith(aaa){     処理; } } 案3)正規表現で実施。定数値がさまざまなため断念。 例) private final static String a1 = "a1"; private final static String a2 = "a2";        : private final static String a100 = "a2"; public void methodA(){  String str = "aaa";  if(a1.startWith(str) || a2.startWith(str) || ・・・ a100.startWith(str)){   処理;  }   : } public void methodB(){  String str = "aaa";  if(a1.startWith(str) || a2.startWith(str) || ・・・ a30.startWith(str)){   処理;  }   : }

    • ベストアンサー
    • Java
  • HashMap要素の操作について

    過去質問を検索致しましたが、適当な質問を見つけられなかった為、質問をさせて頂きます。 ●下記コードのうち、AブロックとBブロックとでどのように異なる為、 Aブロックの値操作が、そのままHashMapへ反省されてしまうのかをご教示願えませんでしょうか? コメント"Aブロック"部分でのArrayList型変数へ操作した内容は、そのままHashMap内の当該キー要素に反映されてしまいます。 コメント"Bブロック"で行う、String型への操作は、HashMap内の当該キー要素に反映はされません。 ■実行環境 ・jdk1.3.1_11 ・Windows XP pro SP2 _________________________________________________ HashMap testMap = new HashMap(); // マップへArrayListとStringを追加 testMap.put("KEY_LIST", new ArrayList()); testMap.put("KEY_STRING", "stringVal"); // Aブロック ArrayList testList = (ArrayList) testMap.get("KEY_LIST"); testList.add("one"); testList.add("two"); testList.remove(0); // Bブロック String testString = (String) testMap.get("KEY_STRING"); testString = "one"; testString = ""; _________________________________________________

    • ベストアンサー
    • Java
  • javaの連想配列について教えてください

    お世話になります。 javaの連想配列について教えてください。 やりたいことは下記のようなデータを作成したいです。 ================================================ {   "shcool" : {          "class" : "A",          "yamada" : {                "class" : "AA",                "height" : 165,                "weight" : 60         },          "saitou" : {                "class" : "AB",                "height" : 170,                "weight" : 65         }   } } ================================================ 下記HPを参考してHashMap+HashMapで作成したのですがうまくいきません。 http://www.atmarkit.co.jp/fjava/javatips/081java010.html Map<String, Object> map = new HashMap<String, Object>(); map.put("school", new HashMap<String, Object>()); ((Map) map.get("school")).put("class", "A"); ((Map) map.get("school")).put("yamada", new HashMap<String, Object>()); ((Map) map.get("school")).get("yamada").put("class", "AB"); ・・・ としても下記エラーとなってしまいます。 ----------------------------------------------------- エラー: シンボルを見つけられません ((Map) map.get("school")).get("yamada").put("class", "AB");                            ^ シンボル: メソッド put(String,String) ----------------------------------------------------- 途中のschoolのvalueにHashMapを入れるところまではうまくいっているようですが、 yamadaのvalueにHashMapを入れて.put()の仕方がわかりません。。。 上記データをHashMap+HashMapで作成するにはどうしたらよいでしょうか? ぜひご教示いただけると嬉しいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • javaでDBから取得したデータのJSP表示

    JAVAでDBから取得し ArrayList shikakuCdList = shikakuCd_Data(); request.setAttribute("shikakuCdList", shikakuCdList); JSPでコンボボックスに表示しようと思います <% ArrayList bumonlist = (ArrayList)request.getAttribute("bumonCdList");%> <% for ( int i = 0; i < bumonlist.size(); i++ ){%> <option value=" (1)ここの記述方法も  "></option> <% }%> という記述にしていますが、うまく動きません。 よろしくお願いします。

    • ベストアンサー
    • Java
  • java HashMapで数値データを取り出すには

    HashMapの使い方について教えてください。 DBのテーブルから、「SEMINAR_TITLE」「SEMINAR_PRESENTER_NAME」「SEMINAR_NUM」の 値を取得して、HashMapにセットしようと考えてます。 「SEMINAR_NUM」だけ、数値型となっており、他の2つは文字列となっています。 ------------------------------------------------------------------------------------------- HashMap seminar_list = new HashMap(); //DBから値を取得して、seminar_listにセットする。 seminar_list = dbControl.get_SEMINAR_LIST("001"); String seminar_title = (String)seminar_list.get("SEMINAR_TITLE"); String seminar_presenter_name = (String)seminar_list.get("SEMINAR_PRESENTER_NAME"); int seminar_num = (int)seminar_list.get("SEMINAR_NUM"); ------------------------------------------------------------------------------------------- のような式を書いてみましたが、 int seminar_num = (int)seminar_list.get("SEMINAR_NUM"); のところでエラーとなってしまいます。 (他の2つの値は取得する事ができています) 数値データを取り出すにはどのようにすればよいのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Java
  • JSPでのページ切り替え

    こんにちわ。 非常に単純な質問で申し訳ありません。 WEBアプリケーションでDBから取得した値(ArrayList型)をJSPで受け取り、1ページに20件ずつ表示したいのですが、次ページへのリンクを行う際に、アプリケーションクラスにArrayList型のデータを渡したりできるのでしょうか? それぞれをString型のデータにしないと取得できませんか? ご回答よろしくお願いします。

    • ベストアンサー
    • Java
  • JSPでのリストボックス表示

    いつもお世話になっております。 サーブレット&JSPでプログラミングの勉強をしています。 JSPでリストボックスを表示させる際に、リストのアイテムをハードコーディングではなく、DBから取得したデータをArrayList等に格納し、表示させたいと思っています。 この場合、ループでArrayListのアイテムを1件ずつ取り出して、JSP内の<select><option></option></select>に当て込む方法が良いのでしょうか? ちなみに以下のテーブル内容で、リストボックスには“作業内容”を表示させて、選択されたときには、“作業コード”を取得させたいのですが、どのようにすれば良いでしょうか? テーブル -------------------- 作業コード|作業内容 -------------------- 0000000001|プログラミング 0000000002|実装 0000000003|テスト よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう