- 締切済み
jspへのディスパッチが上手くいかず苦戦しています
以前こちらで相談し、その件は解決したのですが、また新たに相談させて下さい。長くてすみません。 http://okwave.jp/qa/q9040290.html 以前、サーブレット上にて、ユーザー情報(ID,Pass,Name)が入ったオブジェクトをリストに入れ そのままSystem.out.printlnをすると「GetUser@19e0bfd」が表示され、ユーザー名等が表示せず困りましたと相談したのですが教えて頂いた通りすると解決する事が出来ました。 しかしそのリストのjspにてどうやって飛ばし、どのようにすればJSPにて各リストに入ったオブジェクトを表示させる事ができるでしょうか? ご教授お願い致します。 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //response.getWriter().append("Served at: ").append(request.getContextPath()); GetUser gu1 = new GetUser();//ユーザー一人目 GetUser gu2 = new GetUser();//ユーザー二人目 GetUser gu3 = new GetUser();//ユーザー三人目 gu1.setId("yamada"); gu1.setPass("pas1"); gu1.setName("山田"); gu1.setSex("men"); gu2.setId("suzuki"); gu2.setPass("pas2"); gu2.setName("鈴木"); gu2.setSex("men"); gu3.setId("tanaka"); gu3.setPass("pas3"); gu3.setName("田中"); gu3.setSex("men"); List list = new ArrayList();//リスト3人分 list.add(gu1); list.add(gu2); list.add(gu3); GetUser[] user; user=new GetUser[3]; //各リストに各ユーザーのオブジェクトを入れる for(int i=0; i<list.size(); i++){ user[i]=(GetUser)list.get(i); request.setAttribute("list", user[i]); } //sample_get1.jspに転送 RequestDispatcher dispatcher = request.getRequestDispatcher("/sample_get1.jsp"); dispatcher.forward(request, response); }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- anmochi
- ベストアンサー率65% (1332/2045)
JSP側はJSTLでしたか。だがしかし、以下のJSP側コードで"list"がjava.util.Listインターフェースの実装なら普通に動くような気がしますが・・・・。 <c:forEach var="item" items="list"> <tr> <td>${item.Id} </td> </tr> </c:forEach> もし上のコードを下のように書き換えたら動いたとかだと、JavaBeansでsetter・getterがこういうスクリプト的な書き方する時は大抵set・getを省いて小文字からはじめるみたいな感じになるので気をつけて。 <c:forEach var="item" items="list"> <tr> <td>${item.id} </td> </tr> </c:forEach> これでもダメならまた言うてください。その時に「どううまくいかないのか」を明記していただけると助かります。 ・Tomcatのログに「Warning : hogehoge fugafuga at sample_get1_jsp.java:xxxx」というのが出てくる。 ・ブラウザが真っ白。 ・ブラウザに例外っぽい画面が出てくる。 ・異音がする。 ・異臭がする。 ・爆発する。 など。
- anmochi
- ベストアンサー率65% (1332/2045)
質問に質問で返すようで悪いのだが、あなたはもしこれがjava.util.Listではなくjava.lang.StringだったらサーブレットからJSPへの値の渡し方は分かるのだろうか? それが分かるならListも同じなのですよ。 後、 for(int i=0; i<list.size(); i++){ user[i]=(GetUser)list.get(i); request.setAttribute("list", user[i]); } これはダメじゃろ。なぜかと言うとリストの最後のGetUserインスタンスだけが"list"という属性に入るから。なのでここは素直に request.setAttribute("list", list); だろう。 JSP側だが、生Javaで受け取るなら ・・・ <select id="hogehoge"> <% for(GetUser user : (java.util.List<GetUser>)request.getAttribute("list")) { %> <option value="<%= user.getId() %>"><%= user.getName() %></option> <% } %> </select> ・・・ みたいにすると良いのでは。ここで、GetUserはJSP側でパッケージをインポートしておくか、フルクラス名(パッケージ名+クラス名)も書くかどちらかの対応をしていただきたい。
お礼
ご返答ありがとうございます。 各インスタンスをリストに入れたあとの部分の修正をしました。 List list = new ArrayList(); list.add(gu1); list.add(gu2); list.add(gu3); request.setAttribute("list",list); しかし受け取り側のJSPでインスタンスを表示することに相変わらず苦戦しています。 オブジェクト名でなく、ただの文字列ならサーブレットからJSPで値の受け渡しができるのですが。。。 このような感じでJSTLを使い表示させたいです。 <c:forEach var="item" items="list"> <tr> <td>${item.Id} </td> </tr> </c:forEach>