- - PR -
JSPでHashMapとHashtableの違い
1
投稿者 | 投稿内容 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-04-24 17:18
教えて下さい。
JSPで以下の様にコーディングしたところ、 java.lang.ClassCastException: java.util.Hashtable が発生します。 HashMapをHashtableにすれば、動作しますが、なぜでしょうか? 環境は、 Tomcat5.5 javac 1.5.0_14 Windows Xp です。 ArrayList<HashMap<String, String>> stockArray = (ArrayList<HashMap<String, String>>)request.getAttribute("stockDisp"); for (int i = 0 ; i < stockArray.size() ; i++) { HashMap<String, String> dataHash = stockArray.get(i); // ここがエラー str = dataHash.get("aaa"); } 宜しくお願い致します。 | ||||||||||||||||||||||||
|
投稿日時: 2008-04-24 17:36
stockArrayに実際に格納されているオブジェクトがHashtableなのではないでしょうか。
requestにsetAttributeしている側を確認してみてください。 つまるところ (ArrayList<HashMap<String, String>>)request.getAttribute("stockDisp") の部分のキャストが安全じゃないんですよね。 | ||||||||||||||||||||||||
|
投稿日時: 2008-04-24 17:48
nagiseさん、返答ありがとうございます。
request側は、 ArrayList<HashMap<String, String>> stock = new ArrayList<HashMap<String, String>>() ; HashMap<String, String> dataHash = new HashMap<String, String>(); dataHash.put("aaa", "1"); stock.add(dataHash); request.setAttribute("stockDisp", stock); です。 問題無いと思いますが・・・ いかがでしょうか? 宜しくお願いします。 | ||||||||||||||||||||||||
|
投稿日時: 2008-04-24 18:18
> HashMapをHashtableにすれば、動作しますが、なぜでしょうか?
とありますが、提示のソースはHashMap版、つまりClassCastExceptionが出る版のものですよね? JSPなのでブレークポイントを張りにくいところですね。
の部分で、
などとして、実際の型を見てみるとよいでしょう。 ArrayListの中にHashMapとHashtableが混合して入っているのでしょうか? それともHashtableのみが入っているのでしょうか? requestへのset側には特に問題がないように見えますが、 他の場所で上書きなどしていませんよね? また、WebシステムはJSP含めキャッシュに注意してください。 workフォルダにJSPが変換されて作られるjavaファイルなどがあります。 ソースの編集を行った後は最新のソースから作られたclassファイルが 利用されるようにTomcatを停止させworkをクリーンにして動作確認に臨みましょう。 | ||||||||||||||||||||||||
|
投稿日時: 2008-04-24 18:44
nagiseさんありがとうございます。
はい、そうです。
今度は、この行に java.lang.ClassCastException: java.util.Hashtable が発生しました。
HashMapのみです。
はい、上書きはしていません。
eclipseで開発しております。 プロジェクトをクリーンしてから実行させても同じですね。 宜しくお願いします。 | ||||||||||||||||||||||||
|
投稿日時: 2008-04-24 19:44
そのJSPは、どっかからforwardされてるわけ?
| ||||||||||||||||||||||||
|
投稿日時: 2008-04-24 21:01
となると、動いているJSPの実体が別物の可能性が高いですね。
の部分を試してみてください。 Eclipseのクリーンで行われるのは、WEB-INF/classes以下のクリーニングだけです。 JSPはTomcatが実行時にServletに変換し、classファイルにするため Eclipseのクリーンではゴミが残っていることがあります。 | ||||||||||||||||||||||||
|
投稿日時: 2008-04-28 18:03
rancoさん、nagiseさん返信が遅くなって申し訳ありません。
strutsの1.2.9を使用しています。
上記の通りやってみましたが、結果は同じでした。 宜しくお願いします |
1