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

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

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

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

Java

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

Q&A

1回答

944閲覧

deleteボタンについて

cococcc

総合スコア1

JSP

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

Java

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

0グッド

0クリップ

投稿2022/05/30 14:19

ショッピングカートシステムの作成でカートの中に追加まではできたのですが、削除の実装ができません。サーブレットを介してカートの中の値を取得し一つ削除する。複数商品がある場合は一つ削除し値をセットする形は理解できるのですが、書き方がいまいちわかりません。教えていただけると幸いです。
環境は・JSP・Java・Tomcat・MYSQLです。

AddServlet.Java

1package servlet; 2 3import java.io.IOException; 4import java.io.PrintWriter; 5import java.util.ArrayList; 6import java.util.List; 7 8import javax.servlet.RequestDispatcher; 9import javax.servlet.ServletException; 10import javax.servlet.annotation.WebServlet; 11import javax.servlet.http.HttpServlet; 12import javax.servlet.http.HttpServletRequest; 13import javax.servlet.http.HttpServletResponse; 14import javax.servlet.http.HttpSession; 15 16import model.entity.UserBean; 17 18/** 19 * Servlet implementation class ItemAdd 20 */ 21@WebServlet("/itemadd") 22public class ItemAddServlet extends HttpServlet { 23 private static final long serialVersionUID = 1L; 24 25 /** 26 * @see HttpServlet#HttpServlet() 27 */ 28 public ItemAddServlet() { 29 super(); 30 // TODO Auto-generated constructor stub 31 } 32 33 /** 34 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse 35 * response) 36 */ 37 protected void doGet(HttpServletRequest request, HttpServletResponse response) 38 throws ServletException, IOException { 39 // TODO Auto-generated method stub 40 doPost(request, response); 41 response.getWriter().append("Served at: ").append(request.getContextPath()); 42 } 43 44 /** 45 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 46 * response) 47 */ 48 protected void doPost(HttpServletRequest request, HttpServletResponse response) 49 throws ServletException, IOException { 50 // TODO Auto-generated method stub 51 52 request.setCharacterEncoding("UTF-8"); 53 String item_nm = request.getParameter("itemcode"); 54 int price = Integer.parseInt(request.getParameter("itemprice")); 55 int orderQuantity = Integer.parseInt(request.getParameter("orderQuantity")); 56 57 response.setContentType("text/html; charset=UTF-8"); 58 59 PrintWriter pw = response.getWriter(); 60 61 // セッションオブジェクトの取得 62 HttpSession session = request.getSession(); 63 64 // セッションスコープからの属性値の取得 65 List<UserBean> CartList = (List<UserBean>) session.getAttribute("CartList"); 66 67 // タスクリストが格納されていなかった場合 68 if (CartList == null) { 69 CartList = new ArrayList<UserBean>(); 70 } 71 72 // リクエストのエンコーディング方式を指定 73 request.setCharacterEncoding("UTF-8"); 74 75 UserBean cart = new UserBean(); 76 77 cart.setItem_nm(request.getParameter("itemcode")); 78 cart.setPrice(Integer.parseInt(request.getParameter("itemprice"))); 79 cart.setOrderQuantity(Integer.parseInt(request.getParameter("orderQuantity"))); 80 81 CartList.add(cart); 82 83 // セッションスコープへの属性の設定 84 session.setAttribute("CartList", CartList); 85 // リクエストの転送 86 RequestDispatcher rd = request.getRequestDispatcher("menucartservlet"); 87 rd.forward(request, response); 88 89 90 91 92 } 93 94}

jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8" import="model.entity.UserBean,java.util.List"%> 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8"> 7<title>カート画面</title> 8</head> 9<body> 10 <h1>カート画面</h1> 11 12 <% 13 14 // セッションスコープからの属性値の取得 15 List<UserBean> CartList = (List<UserBean>) session.getAttribute("CartList"); 16 17 if (CartList == null) { 18 %> 19 20 カート内に商品がありません。 21 22 <% 23 }else{ 24 %> 25 26 <h3>カート内商品一覧</h3> 27 28 <table> 29 <tr> 30 <th>商品名</th> 31 <th>価格(円)</th> 32 <th>購入個数</th> 33 </tr> 34 35 <% 36 int sum = 0; 37 for (UserBean user : CartList) { 38 %> 39 <tr> 40 <td><%=user.getItem_nm()%></td> 41 <td><%=user.getPrice()%></td> 42 <td><%=user.getOrderQuantity()%></td> 43 <td><form action="itemdeleteservlet" method="post"> 44 <button type="submit" value="カートから削除" name="button">カートから削除</button> 45 </form></td> 46 </tr> 47 <% 48 sum = sum + user.getPrice() * user.getOrderQuantity(); 49 } 50 %> 51 </table> 52 <br> 53 <%int taxIncluded = (int)sum * 110 / 100;%> 54 合計:<%= taxIncluded %>円 55 <br> 56 (内消費税:<%=(taxIncluded - sum) %>円) 57 <% 58 } 59 %> 60 61 62 63 <form action="CartOrderServlet" method="POST"> 64 <input type="submit" value="レジへ進む"> 65 </form> 66 <a href="menucartservlet">商品一覧画面へ</a> 67</body> 68</html>

DeleteServlet

1package servlet; 2 3import java.io.IOException; 4 5import javax.servlet.RequestDispatcher; 6import javax.servlet.ServletException; 7import javax.servlet.annotation.WebServlet; 8import javax.servlet.http.HttpServlet; 9import javax.servlet.http.HttpServletRequest; 10import javax.servlet.http.HttpServletResponse; 11import javax.servlet.http.HttpSession; 12 13/** 14 * Servlet implementation class ItemDeleteServlet 15 */ 16@WebServlet("/itemdeleteservlet") 17public class ItemDeleteServlet extends HttpServlet { 18 private static final long serialVersionUID = 1L; 19 20 /** 21 * @see HttpServlet#HttpServlet() 22 */ 23 public ItemDeleteServlet() { 24 super(); 25 // TODO Auto-generated constructor stub 26 } 27 28 /** 29 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 30 */ 31 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 32 // TODO Auto-generated method stub 33 response.getWriter().append("Served at: ").append(request.getContextPath()); 34 } 35 36 /** 37 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 38 */ 39 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 40 41 // リクエストオブジェクトのエンコーディング方式の指定 42 request.setCharacterEncoding("UTF-8"); 43 44 HttpSession session = request.getSession(); 45 46 47 /* 48 String[] ids = request.getParameterValues("delete"); 49 50 // DAOの生成 51 UserDAO dao = new UserDAO(); 52 53 try { 54 // DAOの利用 55 dao.delete(ids); 56 } catch (ClassNotFoundException | SQLException e) { 57 e.printStackTrace(); 58 } 59 */ 60 // リクエストの転送 61 RequestDispatcher rd = request.getRequestDispatcher("cart.jsp"); 62 rd.forward(request, response); 63 } 64 65} 66

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

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

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

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

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

guest

回答1

0

カート画面で削除ボタンをクリック ⇒ DeleteServlet.jsp でCartListを更新 ⇒ カート画面を再表示 を実現するための回答になります。
(商品の追加(AddServlet)ではDBを更新していないのに、商品の削除(DeleteServlet)でDB操作を試みている意図がわかりませんでした)

まずは、どの商品の削除ボタンがクリックされたのかを判定できるようにする必要があります。
input type="hidden" を使用することで、画面に表示しない値をサーバーに渡せるようになります。
ひとまずリストのインデックスで判定するようにしてみます。

JSP

1<% 2int sum = 0; 3int index = 0; 4for (UserBean user : CartList) { 5%> 6<tr> 7 <td><%=user.getItem_nm()%></td> 8 <td><%=user.getPrice()%></td> 9 <td><%=user.getOrderQuantity()%></td> 10 <td><form action="itemdeleteservlet" method="post"> 11 <input type="hidden" value="<%= index++ %>" name="cart_index"> 12 <button type="submit" value="カートから削除" name="button">カートから削除</button> 13 </form></td> 14</tr>

あとはDeleteServletでCartList から対象商品を削除してください。

DeleteServlet

1protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 3 // リクエストオブジェクトのエンコーディング方式の指定 4 request.setCharacterEncoding("UTF-8"); 5 6 HttpSession session = request.getSession(); 7 8 List<UserBean> CartList = (List<UserBean>) session.getAttribute("CartList"); 9 10 // 対象商品を削除 11 int cartIndex = Integer.parseInt(request.getParameter("cart_index")); 12 CartList.remove(cartIndex); 13 14 // リクエストの転送 15 RequestDispatcher rd = request.getRequestDispatcher("Cart.jsp"); 16 rd.forward(request, response); 17}

商品コードのような項目を持っていれば、そちらを使用した実装を検討してみてください。DeleteServlet側の処理が少し複雑になりますが。

投稿2022/06/04 06:39

ho-ta-te

総合スコア112

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問