質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

1回答

16261閲覧

jspで拡張for文でhashMapの中身を全て表示

yamanoharu0129

総合スコア47

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2016/08/05 10:21

現在課題で、jspで入力した値をサーブレットのdoPostで受け取ってhashmapに保存し、入力と同じページに表示するプログラムを制作しています。
サーブレットでhashmapへの保存までは出来たのですが、jspでの表示が出来ません。
拡張for文での表示はPOST内では成功しています。
自分の考えている原因は

  • そもそもjspにPOSTで保存したhashmap自体を受け取れていない。(hashmapを呼び出せていないかGET側のhashmapを呼び出してない)
  • 拡張for文前の判定が間違っている(nullの判定ではなく、isEmpty()やキーの値の呼び出しで判定すべきなのか(ただ両方試しましたが失敗しました))
  • GETでのhashmapの作り方が間違っている(POSTで制作したのとは違うhashMapを制作していてそちらが呼び出されている)です。

hashmapの制作自体勉強不足です。jspでの呼び出しとPOSTとGETの連携もよくわかっていないです。
jsp上部のformで入力して、下部のテーブルに表示していくように作りたいです。
ご教授お願いします。

doGET

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { getServletContext().getRequestDispatcher("/WEB-INF/show.jsp").forward(request,response); HashMap<String,Integer> cart = (HashMap<String,Integer>)request.getAttribute("cart");//保持されてる値を持ってきている if(cart == null){//マップが作られていなかったらマップを作る cart = new HashMap(); }; }

POST

request.setCharacterEncoding("utf-8"); String name = request.getParameter("name"); String countString = request.getParameter("count"); Integer count = Integer.valueOf(countString); HttpSession session = request.getSession(); HashMap<String,Integer> cart = (HashMap<String,Integer>)session.getAttribute("cart");//保持されてる値を持ってきている if(cart == null){//マップが作られていなかったらマップを作る cart = new HashMap(); }; System.out.println(cart.size()); //名前(key)が登録されていなかったら、マップにそのまま名前と個数を登録 //名前が登録していたら、値をプラスする if(!(cart.containsKey(name))){//同じ名前のKeyがなければ実行 cart.put(name,count);//名前と個数を登録 }else{//同じ名前のKeyがあった時に実行 System.out.println("名前:"+name+" 入力個数:"+count+" 合計:"+(count+cart.get(name))); cart.put(name,count+cart.get(name)); }; //拡張for文での表示テスト for (String str : cart.keySet()) { System.out.println(str + ":" + cart.get(str)); } session.setAttribute("cart", cart); getServletContext().getRequestDispatcher("/WEB-INF/show.jsp").forward(request,response);

jsp

<form action="Cart" method="POST"> <table> <tr><td>名前:</td><td><input type="text" name="name" value="ごはん"></td><td></td></tr> <tr><td>個数:</td><td><input type="text" name="count" value="1"></td><td></td></tr> <tr><td></td><td></td><td><button>更新</button></td></tr> </table> </form> </div> <br> <div style="border:#000000 solid 1px;"> <table> <% HashMap<String,Integer> cart = (HashMap<String,Integer>)request.getAttribute("cart"); %> <thead><tr><td>現在のカートの内容</td></tr></thead> <tbody> <% if(cart != null){ for(String name : cart.keySet()){ %> <tr><td bgcolor="#00bfff"><%= name %></td><td><%= cart.get(name) %></td><td></td></tr> <% } };%> </tbody> </table> </div>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

動かしてみてませんが、とりいそぎ気ついた点としては:

POST では session.setAttribute("cart", cart);
JSP では request.getAttribute("cart");
ってやってて、入れ物が違う。

session にいれたら session からとる。 request にいれたら request からとる。

投稿2016/08/05 10:42

matobaa

総合スコア2493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamanoharu0129

2016/08/05 13:17

ご指摘の通り、request.getAttribute();の部分をsession.getAttibute();に変更したら動きました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問