質問: ### 実現したい事 jspにてActionクラスのMapを扱う際、任意のキー値を動的に取得するにはどの様に記述すれば良いのでしょうか? 記載コードで実行の結果、値が取得できずテーブルが空となってしまいます。 ※そもそも、Listで渡せばs:iteratorで回すだけで同様の事が実現出来るかと思いますが、Mapでも同様の事が出来ないものかと思い質問させて頂きました。 ### 条件 ・DBから取得できるレコード数は不明 ・Mapを使用した受け渡しとする ### 試した事 ・Java(Action)側の動作に問題が無いことは確認済みです。DBから値の取得、 DTOクラスへのset、sessionへのputも問題ありません。 ・ javascript側のinsertAdjacentメソッド部分をdocument.writeメソッドで試しましたが特に変化はありませんでした。 ``` /* ResultSetクラスのresultにDBから取得したデータを格納。 取得データはいずれもString型。 DTOもDBデータに合わせ定義済み。 sessionはMap。 */ int i=1; while(result.next()){ ItemDTO dto=new ItemDTO(); dto.setName(resultSet.getString("name")); dto.setPrice(resultSet.getString("price")); dto.setStock(resultSet.getString("stock")); session.put("item"+i++,dto); } session.put("itemSize",i-1); ``` ``` < input type="hidden" id="size" value=""> ``` ``` var i=1; var itemTable=document.getElementById("itemTable"); while(i< document.getElementById("size").value){ itemTable.insertAdjacent HTML("beforeend", "" +"" +""); ```
回答: table直下にdiv/inputなどは置けません。 【: 表要素 - HTML: HyperText Markup Language | MDN】 > > 許可されている内容 > > 以下の順となる。 > > 任意の 1 個の 要素 > > 0 個以上の 要素 > > 任意の 1 個の 要素 > > 次の 2 つの選択肢から 1 つ: > > 0 個以上の 要素 > > 1 個以上の 要素 > > 任意の 1 個の 要素 > > > `while(i< document.getElementById("size").value){` に `}` が無く、`i++`のような記述がありません。 そもそもエラーで動いていないのでは。 あと、``はjspの変数を取得するつもりで書かれているとしたら、できません。JSPはサーバ側で出力され、ブラウザ側が受け取るのはテキストファイルで構成されたHTML/JavaScriptです。JavaScriptからJSPの変数を直接読めるわけでは有りません。