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

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

ただいまの
回答率

90.99%

  • Java

    12182questions

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

  • MySQL

    5107questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • JSP

    824questions

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

  • Spring

    582questions

    Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

  • Hibernate

    35questions

    HibernateとはJava言語のobject-relational mapping (ORM)ライブラリであり、Object/Relational Mappingよりはるか多くの方法でアプリケーションをPOJOで機能付けることができます。

Java ショッピングカートシステムについて

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 453

minty

score 7

質問内容

まず初めてこちらに質問するので何か不手際が御座いましたら教えて頂けると有難いです。
よろしくお願いします。

-Javaを勉強していて今ショッピングカートのシステムを構築しています。
機能的にはDBに登録しているユーザー情報、商品情報を取得してログインまた商品一覧画面に表示。
商品一覧画面でselectで個数選択し「カートへ入れる」でカート内の商品確認画面へsubmit。
カート内の商品確認画面で「購入」ボタンを押すと購入完了画面を表示し商品一覧へ戻ると予めDBに登録していた在庫数から購入数を引いて表示するといった感じです。

今現在、DBから商品を取得し商品一覧画面で個数を選択しカート画面を表示するところまでは実装出来ています。最後のDBに登録している在庫数から購入数を引くという操作をどうコーディングするのかが分かりません。

下記に必要と思われるコードを載せますので皆様のお知恵をお貸しください。
初心者故にぐちゃぐちゃなコーディングだと思います。
すみませんが宜しくお願いいたします。

Javaコントローラー

package com.jissyu.shopping2.controller;

※import文は省略します。

@Controller
public class ItemController {

    private static final int NUM_PER_PAGE = 5;

    @Autowired
    private LocationDao locationDao;
    @Autowired
    private ItemDao itemDao;

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        format.setLenient(false);
        binder.registerCustomEditor(Date.class, new CustomDateEditor(format, true));
    }

    @RequestMapping(value = { "/", "/listItem" })
    public String list(@RequestParam(name = "p", defaultValue = "1") Integer page, Model model) throws Exception {
        List<Item> itemList = itemDao.findByPage(page, NUM_PER_PAGE);
        model.addAttribute("itemList", itemList);

        int totalPages = itemDao.totalPages(NUM_PER_PAGE);
        model.addAttribute("totalPages", totalPages);
        model.addAttribute("currentPage", page);
        return "listItem";
    }

    @RequestMapping(value = "/addItem", method = RequestMethod.GET)
    public String addGet(Model model) throws Exception {
        List<Location> locationList = locationDao.findAll();
        model.addAttribute("locationList", locationList);
        Item item = new Item();
        model.addAttribute("item", item);
        return "addItem";
    }

    @RequestMapping(value = "/addItem", method = RequestMethod.POST)
    public String addPost(@Valid Item item, Errors errors, Model model) throws Exception {
        List<Location> locationList = locationDao.findAll();
        model.addAttribute("locationList", locationList);
        if (!errors.hasErrors()) {

            itemDao.insert(item);

            return "addItemDone";
        } else {

            return "addItem";
        }

    }

    @RequestMapping(value = "/buyItem", method = RequestMethod.POST)
    public String buyItem(@RequestParam Integer id, @RequestParam Integer count,

            Model model, HttpSession session) throws Exception {

        @SuppressWarnings("unchecked")
        List<Cart> cartList = (List<Cart>) session.getAttribute("cartList");
        if (cartList == null) {
            cartList = new ArrayList<>();

        }

        boolean itemFound = false;
        for (Cart cart : cartList) {
            Integer cartId = cart.getId();
            if (id == cartId) {
                cart.setCount(cart.getCount() + count);
                itemFound = true;
                break;
            }
        }
        if (!itemFound) {

            Cart cartA = new Cart();
            cartA.setId(id);
            Item itemdb = itemDao.findById(id);
            cartA.setCount(count);
            cartA.setName(itemdb.getName());
            cartA.setPrice(itemdb.getPrice());

            cartList.add(cartA);
        }

        session.setAttribute("cartList", cartList);

        return "buyItem";
    }

//ここにDBの在庫数から購入数を引く計算をするコードを書こうとしています

}
}

jsp

---listItem.jsp---

<%@ page pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link href="<spring:url value="/css/bootstrap.min.css" />"
    rel="stylesheet" />
<link href="<spring:url value="/css/style.css" />" rel="stylesheet" />
<title>ECサイト システム</title>
</head>
<body>
    <div class="container">
        <c:import url="parts/header.jsp" />
        <h1>商品一覧</h1>
        <div class="row">
            <div class="col-md-12">
                <c:import url="parts/pagination.jsp" />
                <table class="table table-bordered">
                    <tr>
                        <th>商品コード</th>
                        <th>商品名</th>
                        <th>価格</th>
                        <th>発送地</th>
                        <th>在庫数</th>
                        <th>商品登録日</th>
                        <th>購入</th>

                    </tr>
                    <c:forEach items="${itemList}" var="item">

                        <tr>
                            <td><c:out value="${item.itemId}" /></td>
                            <td><c:out value="${item.name}" /></td>
                            <td><c:out value="${item.price}" /></td>
                            <td><c:out value="${item.location.name}" /></td>
                            <td><c:out value="${item.stock}" /></td>
                            <td><c:out value="${item.updated}" /></td>



                            <td><c:if test="${item.stock == '0'}" var="flg" />
                                    <c:if test="${flg}" >在庫切れ</c:if> <c:if test="${!flg}">
                                    <form method="POST" action="buyItem">
                                        <input type="hidden" name="id" value="${item.id}" />
                                        <select name="count">
                                            <c:forEach var="stocks" begin="0" end="${item.stock}">
                                                <option value="${stocks}">${stocks}</option>
                                            </c:forEach>
                                            <c:if test="${item.stock!='0'}" var="check">
                                                <input type="submit" value="カートへ入れる">
                                            </c:if>
                                        </select>
                                    </form>
                                </c:if>
                        </tr>
                    </c:forEach>
                </table>
                <a href="<spring:url value="/addItem" />" class="btn btn-primary">商品の追加</a>
            </div>
        </div>
    </div>
    <script src="<spring:url value="/js/jquery-3.2.1.min.js" />"></script>
    <script src="<spring:url value="/js/bootstrap.min.js" />"></script>
</body>
</html>


---buyItem.jsp---


<%@ page pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link href="<spring:url value="/css/bootstrap.min.css" />"
    rel="stylesheet" />
<link href="<spring:url value="/css/style.css" />" rel="stylesheet" />
<title>ECサイト システム</title>
</head>
<body>

    <div class="container">
        <c:import url="parts/header.jsp" />
        <h1>ショッピングカート</h1>
        <div class="row">

            <p>次の商品を購入しますか?</p>

            <table class="table table-bordered">

                <tr>
                    <th>商品ID</th>
                    <th>商品名</th>
                    <th>価格</th>
                    <th>購入数</th>
                </tr>
                <c:forEach items="${cartList}" var="item">
                    <tr>

                        <td><c:out value="${item.id}" /></td>
                        <td><c:out value="${item.name}" /></td>
                        <td><c:out value="${item.price}" /></td>
                        <td><c:out value="${item.count}" /></td>
                    </tr>


                </c:forEach>
            </table>
        </div>

        <a href="<spring:url value="/listItem" />" class="btn btn-default">買い物を続ける</a>
        <br>
        <br>
        <form method="POST" action="buyItemDone">
        <input type="submit" class="btn btn-primary" value="購入する" />
        </form>
    </div>
</body>
</html>

補足情報(言語/FW/ツール等のバージョンなど)

・Java SE8
・Spring Framework(MVC) 4.3.11
・Hibernate ORM
・MySQL WorkBench6.3CE
・TomCat8

以上です。何か足りない情報等あると思いますので随時補足していきます。
宜しくお願いいたします

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • abs123

    2017/10/03 15:58 編集

    結局のところ、何がわからないの?「何かがわからないって分かっているから」コーディングできないって言っているんだよね?その何かを教えて?

    キャンセル

  • minty

    2017/10/03 16:50 編集

    分かりにくい質問内容で申し訳ございません。 購入ボタンを押したあと商品一覧画面へ戻るのですが、その際DBに登録してある(商品一覧に表示されている)在庫数から選択して購入した数を引いた数量を表示したいです。 どのように在庫数を持ってきてDB操作をしたらいいのかがいまいち分からなくて悩んでいます。 説明下手で申し訳ありませんが宜しくお願い致します。

    キャンセル

  • abs123

    2017/10/04 09:53 編集

    処理するタイミングがわからないのか、処理の流れがわからないのか、在庫数を更新するDB操作がわからないのか、処理は思いついているが正しいか自信が持てない、これら以外のなにか、どれ?(修正は質問内容に直接反映してください。ここに長文を書いても読み辛いだけです。)

    キャンセル

  • t_obara

    2017/10/04 12:07 編集

    上記を読むと、コーディングというよりは設計に問題があるように見受けられます。慣れている場合には、設計手順を入れずともコーディングしながら実現できると思いますが、慣れていない場合、それなりに全体像を把握できる設計をすべきです。一からカートシステムを作り上げているのか、修正を加えているのかわかりませんが、カートをどのように実現しているのかイメージがついていないように思われます。

    キャンセル

回答 1

check解決した方法

0

もう一度勉強しなおします

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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

  • Java

    12182questions

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

  • MySQL

    5107questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • JSP

    824questions

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

  • Spring

    582questions

    Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

  • Hibernate

    35questions

    HibernateとはJava言語のobject-relational mapping (ORM)ライブラリであり、Object/Relational Mappingよりはるか多くの方法でアプリケーションをPOJOで機能付けることができます。