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

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

ただいまの
回答率

90.34%

  • Webサイト

    1188questions

    一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

  • JSP

    990questions

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

  • servlet

    500questions

    Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

  • Java ME

    15questions

    Java ME(Java Platform, Micro Edition)はリソースが制限されたデバイス(携帯電話、PDA、テレビなど)用につくられたJavaプラットフォームである。

javaでのショッピングカート作成についての質問

解決済

回答 1

投稿 ・編集

  • 評価
  • クリップ 0
  • VIEW 6,748


現在プログラミングを学ぶ為に、Eclipse Tomcat phpMyAdmin を使用した開発環境で、MVCモデルでの簡単なECサイトを作成しております。
そこで質問なのですが、カートを作成する際にHttpSessionを使用して作りたいと考えているのですが、商品一覧画面から「購入」ボタンを押下し、カートページに移行。ここまではできたのですが、商品のidと、テキストボックスに入力する購入数がうまく取れず、カートページ「買い物を続ける」のボタンで商品一覧画面に戻り、再び別の商品をクリックすると、その商品しか表示されません。どのような記述をすれば自由に追加や削除が出来ますでしょうか?どなたか是非ご教授お願い致します。

コード

「CartServlet」

public class CartServlet extends HttpServlet {
    
    private static final long serialVersionUID = 1L;
    
    public void doGet (HttpServletRequest req, HttpServletResponse res)
                    throws IOException, ServletException {
        
        HttpSession session = req.getSession();
        String count = req.getParameter("count");
        String id = req.getParameter("id");

        CartLogic logic = new CartLogic();
        List<SyohinBean> items = logic.execute("id");
        session.setAttribute("id", logic.execute(id));
        session.setAttribute("item", items);

        CartBean cb = new CartBean();
        session.setAttribute("cartbean", cb);

    RequestDispatcher rd = req.getRequestDispatcher("/jsp/cart.jsp");
    rd.forward (req, res);
    return;    
    }
}
コード 「CartLogic」     public List<SyohinBean> execute (String id) {                  Connection con = null;         Statement smt = null;         ResultSet rs = null;         List<SyohinBean> items = null;                  try {             DBUtil.makeConnection();             DBUtil.makeStatement();                          String sql = "SELECT id,syohinname,category,stock,price FROM syohin WHERE id="+id;             rs = DBUtil.execute(sql);             items = new ArrayList<SyohinBean>();                          if (rs != null) {                 SyohinBean sb = new SyohinBean();                 sb.setId(rs.getString("id"));                 sb.setSyohinname(rs.getString("syohinname"));                 sb.setCategory(rs.getString("category"));                 sb.setStock(rs.getString("stock"));                 sb.setPrice(rs.getString("price"));                 items.add(sb);                                  CartBean cb = new CartBean();                 cb.setSyohinBean(sb);             }         }          catch (Exception e) {             e.printStackTrace();         }         finally{             if(smt !=null){                 try{                     smt.close();                 }catch(SQLException e){                     e.printStackTrace();                 }             }             if(con !=null){                 try{                     con.close();                 }catch(SQLException e){                     e.printStackTrace();                 }                 }         }         return items;     } }
コード 「cartjsp」 <%@ page language="java" contentType="text/html; charset=UTF-8"     pageEncoding="UTF-8"%> <%@ page import="jp.co.so.beans.CartBean" %>     <jsp:useBean id="item" scope="request" class="jp.co.so.beans.SyohinBean"/>    <jsp:useBean id="CartBean" scope="request" class="jp.co.so.beans.CartBean"/> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html> <html>   <head>     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">     <title>買い物カゴ</title>   </head>     <body>        <h1>商品の購入/決済</h1>         <hr>          <table border="1" width="90%" class="list">             <tr>                   <th> 商品名 </th>                   <th> 種類 </th>                   <th> 在庫 </th>                   <th> 価格 </th>                   <th> 購入数 </th>                   <th colspan="2"></th>             </tr>             <c:forEach var="item" items="${items}" varStatus="status">             <form action="" method="get">                 <tr>                     <td><c:out value="${item.syohinname}"/></td>                     <td><c:out value="${item.category}"/></td>                     <td style="text-align:right">あと<c:out value="${item.stock}"/>個</td>                     <td style="text-align:right"><c:out value="${item.price}"/>円</td>                     <form action="" method="get">                           <td align="center">                             <input type="text" name="count" value="<jsp:getProperty name="CartBean" property="count"/>"                              size="4" id="count">                         </td>                         <td align="center">                             <input name= "id" type="hidden" value="${item.id}">                             <input type="submit" name="update" value="更新">                         </td>                         <td align="center">                             <input name= "id" type="hidden" value="${item.id}">                             <input type="submit" name="delete" value="削除">                         </td>                     </form>                 </tr>             </form>             </c:forEach>           </table>             <table border="0" cellpadding="3" cellspacing="1" bgcolor="#666666">       <tr bgcolor="#FFFFFF">         <td width="137" align="right" bgcolor="#FCF9EB"><strong>商品数</strong></td>         <td width="174" align="right" bgcolor="#FFFFFF"><strong>1個</strong></td>       </tr>           <tr bgcolor="#FFFFFF">         <td width="137" align="right" bgcolor="#FCF9EB"><strong>商品合計</strong></td>         <td width="174" align="right" bgcolor="#FFFFFF"><strong>23,760円</strong></td>       </tr>       <tr bgcolor="#FFFFFF">         <td align="right" bgcolor="#FCF9EB">消費税</td>         <td align="right">         1,901円        </td>       </tr>       <tr bgcolor="#FFFFFF">         <td align="right" bgcolor="#FCF9EB"><strong>合計金額</strong></td>         <td align="right"><strong>25,661円</strong></td>       </tr>     </table>                     <hr>                <table width="100%" border="0" cellspacing="1" cellpadding="2">   <tr>     <td valign="top" width="90"><a href="top"><input type="submit" value="買い物を続ける"></a></td>     <td valign="top"><a href=""><input type="submit" value="買い物カゴを空にする" border="0" onClick="return CartAllDelete();"></td>         <td valign="top" align="right">       <form name="send" method="get" action="">       <input type="submit" value="決済画面へ" border="0">       </form>     </td>       </tr> </table>       </body> </html>
拙いコードで恥ずかしい限りですが、何卒よろしくお願いします。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

記載されていないクラスがありますので、全体が正常に動作するかどうかは分かりませんが、
ご質問の、セッション(HttpSession)にCartBeanを保存する方法について説明します。


初回はCartBeanが無いので、セッションに新規CartBeanを保存します。
次回のリクエストではセッションにCartBeanが保存されていますので、それを復元する処理が必要になります。
下記の例では、getCartメソッドで、保存と復元の処理を行っています。

// Servletの抜粋
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
        CartBean cart = getCart(req);
        List<SyohinBean> items = logic.execute(id);
        cart.getItems().addAll(items); // 取得した全てのitemsを追加
        RequestDispatcher rd = req.getRequestDispatcher("/jsp/cart.jsp");
        rd.forward(req, res);
    }

    CartBean getCart(HttpServletRequest req) {
        final String attrId = "CartBean";
        HttpSession session = req.getSession(true); // true=HttpSession が無ければ新規セッションを返す
        Object o = session.getAttribute(attrId);
        if (o == null) {
            final CartBean bean = new CartBean();
            // CartBeanをsessionスコープに設定
            session.setAttribute(attrId, bean);
            return bean;
        } else {
            return (CartBean) o;
        }
    }

JSPのuseBeanは、scope"session"にします。
   <jsp:useBean id="CartBean" scope="session" class="jp.co.so.beans.CartBean"/>

これで、セッションが有効の間は、画面遷移後もカートの内容が維持できると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2014/10/22 12:27

    回答ありがとうございます。
    早速試してみたいと思います。

    キャンセル

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

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Webサイト

    1188questions

    一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

  • JSP

    990questions

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

  • servlet

    500questions

    Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

  • Java ME

    15questions

    Java ME(Java Platform, Micro Edition)はリソースが制限されたデバイス(携帯電話、PDA、テレビなど)用につくられたJavaプラットフォームである。