現在課題で、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>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/05 13:17