JSPにてORマッパーのreadMapListを使用して結果を全件表示する方法

このQ&Aのポイント
  • ServletのSQL文で取得した結果をreadMapListを使用してJSPに送り、JSPで全件表示する方法について説明します。
  • JSPでリクエストを取得し、readMapListの結果をList<String>として取得する方法について説明します。
  • リクエストのデータはJSON形式であり、item_nameなどの各項目を出力するには、JSONデータから値を取得する方法について説明します。
回答を見る
  • ベストアンサー

ORM java

ORマッパーのreadMapListの要素 ServletのSQL文で出した結果をreadMapListをリクエストしてjsp側に送りjsp側で結果を全件表示させたいです。 Servlet try{ conn = DBManager.getConnection(); Persist persist = new Persist(conn); List<Map<String, Object>> strages = persist.readMapList("select * from t_storage_order,m_item,m_customer where t_storage_order.item_id = m_item.item_id AND t_storage_order.customer_id = m_customer.customer_id order by storage_order_id"); request.setAttribute("strages",strages); } finally { DBManager.close(conn); } return "/WEB-INF/view/orderStrageLists.jsp"; となっておりjspではどのようにリクエストを取得し全件表示して綺麗に並べる事ができるのでしょうか jspでList<String> strage = (List<String>)request.getAttribute("strages")と取得し 1つのデータは[{storage_order_id=59, customer_id=1, item_id=3, amount=999, store_id=1, order_state=10, order_datetime=2014-07-11, storage_limit_date=2014-07-18, storage_datetime=2014-07-11 item_name=本AAAAAA, jan_code=11111...のようになっていました これのitem_nameなど各項目を出力するにはどうしたらいいのでしょうか

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

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

  • ベストアンサー
  • sundara
  • ベストアンサー率26% (22/82)
回答No.1

Servletで「List<Map<String, Object>> strages」でもらって、 JSPで「List<String> strage = (List<String>)request.getAttribute("strages")」で取ってるのがおかしいんじゃないの? JSP側で「List<Map<String, Object>>」でもらえば、mapのkey値取れるんでね?

関連するQ&A

  • javaの掲示板について

    今現在パスワードを比較して一致していれば削除としたのですがjava.sql.SQLException: Can not issue data manipulation statements with executeQuery().というエラーがtomcatにでます。 サーブレットはこう書いています //削除 if(deleteMessage != null){ String deleteid = request.getParameter("id"); String deletepassword = request.getParameter("deletepassword"); String rspassword = dao.getPassword(deleteid); if (deletepassword.equals(rspassword)){ dao.deleteMessage(delete); success = "削除しました。"; request.setAttribute("success", success); } else{ errorpass = "パスワードが違います。"; request.setAttribute("errorpass", errorpass); } } 比較用のパスワードをデータベースから取り出すDAOはこうしています。 public int deleteMessage(String strid) throws Exception { Vector messageList = new Vector(); int i = 0; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try{ conn = this.getConnection(); String sql = "delete from MESSAGE_TABLE where ID = ? "; pstmt = conn.prepareStatement(sql); pstmt.setString(1, strid); rs = pstmt.executeUpdate(); } finally { this.close(rs); this.close(pstmt); this.close(conn); } return i; } public String getPassword(String id) throws Exception { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String rspassword = null; try { String deleteid = null; conn = this.getConnection(); String sql = "SELECT * FROM MESSAGE_TABLE where ID = ? "; pstmt = conn.prepareStatement(sql); pstmt.setString(1, id); rs = pstmt.executeQuery(); if(rs.next()){ rspassword = rs.getString("PASSWORD"); } } finally { this.close(rs); this.close(pstmt); this.close(conn); } return rspassword; } データベースからパスワードがとれていないから起きているのだとは思うのですが、どのようにしたらとれるでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • javaの掲示板について

    サーブレットの削除機能の抜粋なのですが public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { MessageDao dao = new MessageDao(); String sendMessage = request.getParameter("sendMessage"); String deleteMessage = request.getParameter("deleteMessage"); if(deleteMessage != null){ String deleteid = request.getParameter("id"); String deletepassword = request.getParameter("deletepassword"); String rsPassword = request.getParameter("rsPassword"); if (deletepassword.equals("rsPassword") || deleteid.equals("id")){ Message message = new Message(); message.setId(Integer.parseInt(deleteid)); } if (!deletepassword.equals("rsPassword") || deleteid.equals("id")){ } } 削除成功や、削除パスが違う時に投稿用jspに文を表示して、かつレコードを消すという処理をしたいのですが、そのような記述はどのようにすればいいのでしょうか? 今のままだと判定だけして終わっていると思うのですが思いつきません。 よろしくお願いします。

  • javaの掲示板について

    サーブレットの削除機能の抜粋なのですが public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { MessageDao dao = new MessageDao(); String sendMessage = request.getParameter("sendMessage"); String deleteMessage = request.getParameter("deleteMessage"); //削除 if(deleteMessage != null){ String sql = "SELECT * FROM MESSAGE_TABLE where ID ="; String rsPassword = request.getParameter("rsPassword"); String deleteid = request.getParameter("id"); String deletepassword = request.getParameter("deletepassword"); if (deletepassword.equals(sql) || deleteid.equals(sql)){ dao.deleteMessage(delete); success = "削除しました。"; request.setAttribute("success", success); } if (!deletepassword.equals(sql) || deleteid.equals(sql)){ errorpass = "パスワードが違います。"; request.setAttribute("errorpass", errorpass); } } ------------------------------------------------------------------------------------ jsp部分 <input type="deletepassword" size="20"> <input type="hidden" name="id" value="<%= message.getId() %>"> <input type="hidden" name="rsPassword" value="<%= message.getPassword() %>"> <input type="submit" name="deleteMessage" value="削除"> それぞれをこの様な書き方で記述した場合、削除ボタンを押された際に削除フォームに入力されたパスワードとidをデータベース内に格納されているパスワードとidと比較して削除、もしくはエラーという様にできているでしょうか?できていなければ変更点の御指摘をお願いします。 ------------------------------------------------------------------------------------ <% String errorpass = (String)request.getAttribute("errorpass"); if(errorpass != null){ out.println(errorpass); } %> またjspの表示部分を上記のようにしているのですが、out.printlnを使わないで記述する場合どのように書けばよいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • java質問

    @Override protected String execute(HttpServletRequest request, HttpServletResponse response) { String itemName = request.getParameter("iName"); String jancode = request.getParameter("code"); if (!isValidInput(Name, code)) { return "/Order"; } /** * 入力値のチェックを行う */ private boolean isValidInput(String Name, String code,) { /** 未入力チェック処理(省略)*/ return false; } } これをtrueの場合は request.setAttribute("itemName",Name); request.setAttribute("janCode",code); try { Part image = request.getPart("image"); Long fileName = System.currentTimeMillis(); image.write(fileName.toString()); request.setAttribute("fileName", fileName); } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return "/WEB-INF/view/orderstragedata.jsp"; } といった処理をしたいのですがtrueはどのように作成すればよいのでしょうか?

  • リストに入ったインスタンスをjspで表示させたい

    idやpassやユーザーの情報が入ったインスタンスgu1,gu2,gu3があります。 そのインスタンスをリストに入れ、最終的にJSP側に飛ばしたいです。 JSPで受け取ったリストをすべてテーブルタグ上に表示させたいのですがうまくいきません。 request.setAttribute("list",”文字列”);であれば受け渡しができるのですが、インスタンスとなると難しく・・・。 ご教授お願い致します。 サーブレット側 list.add(gu1); list.add(gu2); list.add(gu3); request.setAttribute("list",list); JSP側 <table border="1"> <c:forEach var="item" items="list">    <tr> <td>${item.Id} </td>←ここが間違えている気がします。 <td>${item.pass} </td>  </tr> </c:forEach> </table>

  • javaの掲示板について

    サーブレットにおいて未入力のチェックを行っているのですがこのままだと、未入力の表示と一緒に空欄の投稿ができてしまいます。 String sendMessage = request.getParameter("sendMessage");               String name = request.getParameter("name"); if(name.equals("")){ errorname = "名前を入力してください"; request.setAttribute("errorname",errorname); } Message message = new Message(); message.setName(name); Vector messageList = dao.getMessageList(); request.setAttribute("MESSAGE_LIST", messageList); ServletContext sc = this.getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher("/bbs.jsp"); rd.forward(request, response); } catch (Exception e) { e.printStackTrace(); } 空欄の投稿がされないようにするにはどうすればいいのでしょうか? 全く思いつかないので詳しく説明をお願いします。

    • ベストアンサー
    • Java
  • jspのプログラムについて

    jspについて質問です。 現在入力されたパスワードとデータベースに保存してあるパスワードを比較して一緒であれば idを削除するというプログラムを組んでいます。 削除することはできないのですが、 比較がうまくいきません。 <% //postされたもの String id = request.getParameter("id"); String password =request.getParameter("password") Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection(urlやpassword、userが書いてある); request.setCharacterEncoding("utf8"); Statement st=conn.createStatement(); Statement stmt=conn.createStatement(); ResultSet res = st.executeQuery("select * from data where id ="+id); while(res.next()){ String pass =res.getString("pass"); //データベースからパスワードを取得 out.println("<td>" + password + "</td>"); out.println("<td>" + pass + "</td>"); if(password==pass){ //入力されたパスワードと比較 //ここにはidを削除する文が書かれている } } st.close(); conn.close(); やっているのですが、if文に入って削除してくれません。 out.printlnはいりませんがちゃんと値があっているか確かめたところ 入力された文字とデータベースに入っている文字がちゃんと表示されました。 教えてください。よろしくお願いします。

  • SQLで重複値を除去したものを抽出したい

    SQLで重複を除去したいのですが、DISTINCTやGROUP BYも検討したのですが、どうしても良い方法が見つからなかったので質問させて頂きます。 テーブルの構成は以下のようになっています。 roomsテーブル id(INTEGER) public(BOOLEAN) updated_at(DATETIME) created_at(DATETIME) messagesテーブル id(INTEGER) sendfrom_list_id(INTEGER) sendto_list_id(INTEGER) room_id(INTEGER)※roomsテーブルへの外部キー body(STRING) updated_at(DATETIME) created_at(DATETIME) 更に条件は以下のようになっています。 ・アウトプットとして得たいのは rooms.updated_at rooms.id rooms.public messages.room_id messages.sendfrom_list_id messages.sendto_list_id messagess.body の7カラム。 ・rooms.publicがTRUEである ・messages.room_id = rooms.idであること ・updated_atでDESCにソート このような条件を満たすSQL文は以下のように書くことができました。 SELECT R.updated_at, R.id, R.public, M.room_id, M.sendfrom_list_id, M.sendto_list_id, M.body FROM messages AS M, rooms AS R WHERE R.public = "t" AND M.room_id = R.id ORDER BY R.updated_at DESC; しかし、ここに更に「rooms.idが重複しないもののみ抽出」という条件を加えたいのですが、どうしてもうまく行きません。 DISTINCTでは複数の中から一部のカラムだけをDISTINCTすることはできないようですし、GROUP BYも考えましたがどうやれば良いかわかりませんでした。 どなたか良い方法を教えて下さい。

  • java strutsでの一覧表の表示方法について

    以下の内容でロジックを組んだのですが、 jspより表示される一覧表は、003 name3が3件表示されてしまいます。 一覧表を正しく表示できない原因を教えてください。 SP0010_FORM_Bean.java public class SP0010_FORM_Bean { protected String id; protected String name; public void setId(String s) { id = s; } public String getId() { return id; } public void setName(String s) { name = s; } public String getName() { return name; } } SP0010_FORM.java public class SP0010_FORM extends ValidatorForm{ protected List<SP0010_FORM_Bean> loopList; public void setLoopList(List<SP0010_FORM_Bean> list) { loopList = list; } public List<SP0010_FORM_Bean> getLoopList() { return loopList; } } SP0010_ACTION_10.java SP0010_FORM initBean = new SP0010_FORM(); request.setAttribute("list_form", initBean); List<SP0010_FORM_Bean> list = new ArrayList<SP0010_FORM_Bean>(); SP0010_FORM_Bean bean1 = new SP0010_FORM_Bean(); bean1.setId("001"); bean1.setName("name1"); list.add(bean1); bean1.setId("002"); bean1.setName("name2"); list.add(bean1); bean1.setId("003"); bean1.setName("name3"); list.add(bean1); initBean.setLoopList(list); jsp <table border="1"> <logic:iterate id="loop" name="list_form" property="loopList"> <tr> <td><bean:write name="loop" property="id" /></td> <td><bean:write name="loop" property="name" /></td> </tr> </logic:iterate> </table>

    • ベストアンサー
    • Java
  • javaのcsvダウンロードについて

    javaについてです。 現在 http://www58.atwiki.jp/chapati4it/m/pages/143.ht … このサイトのcsvファイルをダウンロードするプログラムを作りました。 そこで このサイトではString[][] rows =に 値を入れていますが、その前にデータベースに接続して getStringで値をとってきてString型に入れてそれをcsvとして表示させたいのですが、どうすればよいですか? jspでデータベースの内容を表示させるものはもともと作ってあって、 Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/データベース名?" + "user=ユーザー&password=パスワード&useUnicode=true&characterEncoding=utf8"); request.setCharacterEncoding("utf8"); Statement st=conn.createStatement(); ResultSet res = st.executeQuery("select * from テーブル名 "); これを書いて、getStringで受っとてやればいいのかなと思うのですが... できれば一個のファイルにまとめたいのですが、わかる人よろしくお願いします。 javaの知識が不十分です。すいません

専門家に質問してみよう