SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

GlassFishからアプローチするJava

GlassFishからアプローチするJava~入門編~
第6回「Webアプリケーションの作成 ON DELETE CASCADE」

買い物かごへの削除、更新機能の実装

ダウンロード サンプルコード (16.5 KB)

合計、送料、総合計の計算

 ここまでできてしまえば、いろんな機能を盛り込むことが簡単になります。仕様の4は明細の金額の合計、送料(一律1,500円)、総合計を表示することでした。合計を求めるのは至って簡単です。これはJavaScriptを使えばクライアント側でも可能ですが、サーバ側で行う方法を示します。今回は新しいServletを作ることはありません。RefreshBasketServletに処理を追加します。

ImoshochuShop.jspの変更

 図5のように取り立てて目新しいことは行っていません。若干違うところは、今まではsessionScopeから取り出したのが総称型のArrayListでしたが、今回はraw型のArrayListを使用しています。var属性値をtotalとし、${total}として値を取り出していますが、このArrayListをaとするとa.get(0)に明細合計、a.get(1)に送料、a.get(2)に総合計が入っているのと同義です。非常にシンプルな記法です。ただし、この例のように総称型かraw型かにより記法が異なるので注意が必要です。

図5.ImoshochuShop.jspの明細合計、送料、総合計の表示
図5.ImoshochuShop.jspの明細合計、送料、総合計の表示

RefreshBasketServletの変更

 図6が明細合計、送料、総合計を求めるために変更したprocessRequestメソッドです。

図6.RefreshBasketServletクラスのprocessRequestメソッド
001:    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
002:    throws ServletException, IOException {
003:
004:        ArrayList basketItems = new ArrayList();
005:
006:        String[] basketItemIds = request.getParameterValues("id");
007:        String[] allQuantity = request.getParameterValues("quantity");
008:
009:        int basketId = 0;
010:
011:        BasketHelper basketHelper = new BasketHelper();
012:        // ログインしたユーザidをもとにデータベースからbasket情報を
013:        // 取得する。第5回は固定で「tomoharu」とする
014:        basketId = basketHelper.getBasketId("tomoharu");
015:
016:        basketHelper.updateBasketItems(basketItemIds, allQuantity);
017:
018:        basketItems = basketHelper.getBasketItems(basketId);
019:        request.getSession().setAttribute("basket", basketItems);
020:        ArrayList totalCharge = basketHelper.getTotalCharge(basketItems);
021:        request.getSession().setAttribute("totalCharge", totalCharge);
022:
023:        // ImoshochuShop.jspに遷移する
024:        RequestDispatcher rd = request.getRequestDispatcher("/ImoshochuShop.jsp");
025:        rd.forward(request, response);
026:
027:    }

 明細合計、送料、総合計を求めるために必要なのは、20、21行目のみです。BasketHelperクラスのgetTotalChargeメソッドにbasketItemsを渡し、返ってきたArrayListをHttpSessionに格納しているだけです。

ImoshochuCatalogServletクラス、BasketServletクラスの変更

 この2つのクラスも明細合計、送料、総合計を求めなければならないため、図6の20、21行目をそのまま、HttpSessionにbasketItemsを格納している箇所の下に追加してください。

 ここまでで、冒頭で説明した仕様の4を実装したことになります。画面は図7のようになります。

図7.明細合計、送料、総合計の表示実装後の画面
図7.明細合計、送料、総合計の表示実装後の画面

次のページ
[レジへ進む]ボタンで一括削除

この記事は参考になりましたか?

GlassFishからアプローチするJava連載記事一覧

もっと読む

この記事の著者

川久保 智晴(カワクボ トモハル)

haruプログラミング教室(https://haru-idea.jp/)主宰。COBOL、FORTRANで13年、Javaを中心としたWeb開発で11年。3つしか言語知らないのかというとそうでもなく、sed/awk、Perl、Python, PHP,  C#, JavaScriptなども一時期は業...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4920 2010/03/10 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー