合計、送料、総合計の計算
ここまでできてしまえば、いろんな機能を盛り込むことが簡単になります。仕様の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型かにより記法が異なるので注意が必要です。
RefreshBasketServletの変更
図6が明細合計、送料、総合計を求めるために変更した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のようになります。


