広告

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                      2010年04月18日

    Java総合講座 - 初心者から達人へのパスポート
                  vol.200

                                セルゲイ・ランダウ
 バックナンバー: http://www.flsi.co.jp/Java_text/
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


-------------------------------------------------------
・現在、このメールマガジンは以下の2部構成になっています。
[1] 当初からのコース:毎週日曜の夜に発行
   これは現在、中級レベルになっています。
[2] 2009年11月開講コース:毎週水曜の夜に発行
   これは現在、初心者向けのレベルになっています。
・このメールマガジンは、画面を最大化して見てください。
小さな画面で見ていると、不適切な位置で行が切れてしまう
など、問題を起すことがあります。
・このメールマガジンに掲載されているソース・コード及び
文章は特に断らない限り、すべて筆者が著作権を所有してい
ます。また、これらのソース・コードは学習用のためだけに
提供しているものです。
-------------------------------------------------------


========================================================
◆ 01.Strutsのアプリケーション開発(プロジェクト:StrutsShop)
========================================================


前回までで、インターネット・ショッピングのアプリケーションの処理の
基本的な流れは一通りプログラミングしましたが、forwardが"success"
以外の値の場合に対する処理をまだ実装していませんでした。

今回はそれをやりましょう。


まず、OrderProcessActionを見てみましょう。
下記に再度ソース・コードを提示します。

--------------------------------------------------------
package jp.co.flsi.lecture.struts;

import java.util.Enumeration;
import java.util.Vector;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import jp.co.flsi.lecture.reflect.ValueLogStringMaker;
import jp.co.flsi.lecture.struts.db.Order;
import jp.co.flsi.lecture.struts.db.OrderItem;

import org.apache.log4j.Logger;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class OrderProcessAction extends Action {
   private static Logger logger = Logger.getLogger(OrderProcessAction.class);

   public ActionForward execute(ActionMapping mapping, ActionForm form,
         HttpServletRequest request, HttpServletResponse response) {
      logger.info("Start ...............");
      try {
         ValueLogStringMaker stringMaker = new ValueLogStringMaker();
         logger.info("Method parameter: <<<<<" + stringMaker.getValues("mapping", mapping));
         logger.info(">>>>>");
         logger.info("Method parameter: <<<<<" + stringMaker.getValues("form", form));
         logger.info(">>>>>");
         logger.info("Method parameter: <<<<<" + stringMaker.getValues("request", request));
         logger.info(">>>>>");
         logger.info("Method parameter: <<<<<" + stringMaker.getValues("response", response));
         logger.info(">>>>>");
         HttpSession session = request.getSession();
         Order anOrder = (Order)session.getAttribute("ORDER");
         if (anOrder == null) {
            logger.info("Method return: <<<<< cartVacant (1)");
            logger.info(">>>>>");
            return mapping.findForward("cartVacant");
         }
         Vector<OrderItem> orderItemList = anOrder.getOrderItems();
         if (orderItemList == null) {
            logger.info("Method return: <<<<< cartVacant (2)");
            logger.info(">>>>>");
            return mapping.findForward("cartVacant");
         }

         Enumeration<String> paramNames = (Enumeration<String>) request.getParameterNames();
         // Webページ上の購入対象の商品がカートの中に入っていることのチェック用フラグ
         boolean orderItemFoundInCart = false;  // チェック用フラグ: falseは「カートにない」を意味する
         while(paramNames.hasMoreElements()) {
            String aParamName = paramNames.nextElement();
            OrderItem anOrderItem = new OrderItem();
            for (OrderItem oi : anOrder.getOrderItems()) {
               if(aParamName.equals(oi.getItemNum())) {  // そのアイテム番号がカートの中に見つかったら
                  orderItemFoundInCart = true;  // チェック用フラグを「カートにある」にセット
                  anOrderItem.setItemNum(oi.getItemNum());
                  anOrderItem.setItemName(oi.getItemName());
                  anOrderItem.setPrice(oi.getPrice());
                  anOrderItem.setImage(oi.getImage());
                  anOrderItem.setCatName(oi.getCatName());
                  anOrderItem.setOrderQuantity(Integer.parseInt((String)request.getParameter(aParamName)));
                  break;  // そのアイテム番号に対する処理が終わったのでループを脱出
               }
            }
            if (orderItemFoundInCart) {  // そのアイテムが「カートにある」場合
               anOrder.removeOrderItem(anOrderItem);  // そのアイテムの古い注文情報をいったん取り除く
               if (anOrderItem.getOrderQuantity() > 0) {  // 注文個数が0でなければ
                  anOrder.addOrderItem(anOrderItem);  // カートに入れなおす
               }
               orderItemFoundInCart = false;  // チェック用フラグを「カートにない」にリセット
            }
         }

         if (anOrder.getOrderItems().size() < 1) {  // カートの中が空になった場合
            logger.info("Method return: <<<<< cartVacant (3)");
            logger.info(">>>>>");
            return mapping.findForward("cartVacant");
         }
      }
      catch (Throwable e) {
         logger.error(e, e);
      }
      finally {
         logger.info("End ...............");
      }
      logger.info("Method return: <<<<< success");
      logger.info(">>>>>");
      return mapping.findForward("success");
   }

}
--------------------------------------------------------

このソース・コードではショッピング・カートが空の場合は、

return mapping.findForward("cartVacant");

を実行するようにしています。つまり、forwardに"cartVacant"を設定
してreturnしています。


では、ショッピング・カートが空のときに表示するWebページ(cartVacantError.jsp
というファイル名にする)を下記の手順で作成しておきましょう。



◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆


(1) プロジェクト・エクスプローラーのStrutsShop配下のWebContent配下の
WEB-INF配下のstruts-config.xmlをダブル・クリックします。

(2) struts-config.xmlのフロー・エディターが開いたら、左側に並んでいる
アイコンのうち、「ページ」をクリックし、/orderprocessのアイコンの左下
あたりの白い領域の中でクリックします。

(3) 貼り付いたアイコンの文字列を

/cartVacantError.jsp

に書き換えて下さい。

(4) 同様に、アイコンのうち、「進む」をクリックし、先ほどの/orderprocess
のアイコンをクリックし、続いて、先ほど貼り付けた/cartVacantError.jspのアイコン
をクリックします。そうすると、2つのアイコンの間に矢印の線が引かれますね。
このままだと、この矢印線を引くモードのままになっているので、いったん「選択」
というアイコンをクリックすることによってモードを解除しておいて下さい。

(5) 先ほどの矢印線に「forward1」というような文字列が付いていると思いますが、
これを

cartVacant

に書き換えて下さい。

(6) Ctrl + Sキーでファイルを保管しておきましょう。



◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆


このままだと、/cartVacantError.jspのアイコンに警告のマーク(丸みを帯びた
橙色の小さな三角形の中にエクスクラメーション・マーク(ビックリ・マーク)が
入ったアイコン)が付いていますが、これはcartVacantError.jspというファイルが
実在しないからなので、これからそれを作成しましょう。

(1) /cartVacantError.jspのアイコンをダブル・クリックします。

(2) 「Struts JSPファイル」ウインドウが表示されたら、「完了」ボタンを
クリックします。

(3) cartVacantError.jspのエディターが開いたら、下記のように編集して保管しま
しょう。

--------------------------------------------------------
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-nested" prefix="nested" %>

<html:html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
      <title>ショッピング・カート・エラー</title>
   </head>
   <body bgcolor="#77ffff" text="#fa5a00">
      <h1>ショッピング・カート・エラー</h1>
      <font color="#ff0000">ショッピング・カートが空のため、処理を続行できません。</font>
      <br>
      まことに申し訳ありませんが、商品の検索から再度やり直してください。
      <br>
      <br>
      <html:link page="/itemSelect.jsp">トップ・ページ(商品検索のページ)に戻る</html:link>
   </body>
</html:html>
--------------------------------------------------------



◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆


次に、ConfirmOrderActionを見てみましょう。
下記に再度ソース・コードを提示します。

--------------------------------------------------------
package jp.co.flsi.lecture.struts;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Vector;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import jp.co.flsi.lecture.reflect.ValueLogStringMaker;
import jp.co.flsi.lecture.security.PasswordEncryption;
import jp.co.flsi.lecture.struts.db.Order;
import jp.co.flsi.lecture.struts.db.OrderItem;
import jp.co.flsi.lecture.struts.db.StruShopDbException;
import jp.co.flsi.lecture.struts.db.User;
import jp.co.flsi.lecture.struts.db.UserDbManager;

import org.apache.log4j.Logger;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class ConfirmOrderAction extends Action {
   private static Logger logger = Logger.getLogger(ConfirmOrderAction.class);

   public ActionForward execute(ActionMapping mapping, ActionForm form,
         HttpServletRequest request, HttpServletResponse response) {
      logger.info("Start ...............");
      UserDbManager userDbManager = new UserDbManager();
      try {
         ValueLogStringMaker stringMaker = new ValueLogStringMaker();
         logger.info("Method parameter: <<<<<" + stringMaker.getValues("mapping", mapping));
         logger.info(">>>>>");
         logger.info("Method parameter: <<<<<" + stringMaker.getValues("form", form));
         logger.info(">>>>>");
         logger.info("Method parameter: <<<<<" + stringMaker.getValues("request", request));
         logger.info(">>>>>");
         logger.info("Method parameter: <<<<<" + stringMaker.getValues("response", response));
         logger.info(">>>>>");
         HttpSession session = request.getSession();
         Order anOrder = (Order)session.getAttribute("ORDER");
         if (anOrder == null) {
            logger.info("Method return: <<<<< cartVacant (1)");
            logger.info(">>>>>");
            return mapping.findForward("cartVacant");
         }
         Vector<OrderItem> orderItemList = anOrder.getOrderItems();
         if (orderItemList == null) {
            logger.info("Method return: <<<<< cartVacant (2)");
            logger.info(">>>>>");
            return mapping.findForward("cartVacant");
         }
         OrderForm orderForm = (OrderForm) form;
         User user = new User();
         userDbManager.connect();
         String maxUserid = userDbManager.getMaxTemporaryUserid();
         user.setUserType("T");       // 一時的顧客のユーザー・タイプは"T"
         NumberFormat formatter = new DecimalFormat("0000000");
         user.setUserid(formatter.format(Integer.parseInt(maxUserid) + 1));
         user.setPassword(PasswordEncryption.encrypt("NONE"));
         user.setName(orderForm.getName());
         user.setZipcode(orderForm.getZipcode());
         user.setAddress(orderForm.getAddress());
         user.setTelno(orderForm.getTelNo());
         user.setEmail(orderForm.getEmailAddress());
         if (!userDbManager.insertData(user)) {
            logger.info("Method return: <<<<< userInsertError");
            logger.info(">>>>>");
            return mapping.findForward("userInsertError");
         }
         anOrder.setUserType(user.getUserType());
         anOrder.setUserId(user.getUserid());
         anOrder.setPayMethod(Integer.parseInt(orderForm.getPayMethod()));
         session.setAttribute("USER", user);
      } catch (StruShopDbException e) {
         logger.error(e, e);
      }
      catch (Throwable e) {
         logger.error(e, e);
      }
      finally {
         try {
            userDbManager.disconnect();
         }
         catch (Exception e) {
            logger.info("Disconnect failed or there is no connection.");
         }
         logger.info("End ...............");
      }
      logger.info("Method return: <<<<< success");
      logger.info(">>>>>");
      return mapping.findForward("success");
   }

}
--------------------------------------------------------

ここでは、先ほどと同じ

return mapping.findForward("cartVacant");

のほかに、何らかの理由で顧客情報のデータベース登録に失敗した場合に

return mapping.findForward("userInsertError");

を実行するようにしています。つまり、forwardに"userInsertError"を設定
してreturnしています。



では、これらに対応して、先ほどと同様にstruts-config.xmlを編集し、
顧客情報のデータベース登録に失敗したときに表示するWebページ(userInsertError.jsp
というファイル名にする)を作成する作業を下記の手順で実施しましょう。



◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆


(1) プロジェクト・エクスプローラーのStrutsShop配下のWebContent配下の
WEB-INF配下のstruts-config.xmlをダブル・クリックします。

(2) struts-config.xmlのフロー・エディターが開いたら、左側に並んでいる
アイコンのうち、「ページ」をクリックし、/confirmorderのアイコンの左下
あたりの白い領域の中でクリックします。

(3) 貼り付いたアイコンの文字列を

/userInsertError.jsp

に書き換えて下さい。

(4) 同様に、アイコンのうち、「進む」をクリックし、/confirmorderのアイコン
をクリックし、続いて、以前貼り付けていた/cartVacantError.jspのアイコン
をクリックします。そうすると、2つのアイコンの間に矢印の線が引かれますね。
このままだと、この矢印線を引くモードのままになっているので、いったん「選択」
というアイコンをクリックすることによってモードを解除しておいて下さい。

(5) 先ほどの矢印線に「forward1」というような文字列が付いていると思いますが、
これを

cartVacant

に書き換えて下さい。

(6) 続いて再度、アイコンのうち、「進む」をクリックし、/confirmorderのアイコン
をクリックし、次に、先ほど貼り付けた/userInsertError.jspのアイコン
をクリックします。そうすると、2つのアイコンの間に矢印の線が引かれますね。
このままだと、この矢印線を引くモードのままになっているので、いったん「選択」
というアイコンをクリックすることによってモードを解除しておいて下さい。

(7) 先ほどの矢印線に「forward1」というような文字列が付いていると思いますが、
これを

userInsertError

に書き換えて下さい。

(8) Ctrl + Sキーでファイルを保管しておきましょう。



◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆


このままだと、/userInsertError.jspのアイコンに警告のマーク(丸みを帯びた
橙色の小さな三角形の中にエクスクラメーション・マーク(ビックリ・マーク)が
入ったアイコン)が付いていますが、これはuserInsertError.jspというファイルが
実在しないからなので、これからそれを作成しましょう。

(1) /userInsertError.jspのアイコンをダブル・クリックします。

(2) 「Struts JSPファイル」ウインドウが表示されたら、「完了」ボタンを
クリックします。

(3) userInsertError.jspのエディターが開いたら、下記のように編集して保管しま
しょう。

--------------------------------------------------------
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-nested" prefix="nested" %>

<html:html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
      <title>システム障害</title>
   </head>
   <body bgcolor="#77ffff" text="#fa5a00">
      <h1>システム障害</h1>
      <font color="#ff0000">システム障害が発生したため、処理を続行できません。</font>
      <br>
      まことに申し訳ありませんが、システムが復帰するまでお待ち下さい。
      システムの復帰には数時間かかると思われますが、詳しいことはトップ・ページにてお知らせいたします。
      <br>
      <br>
      <html:link page="/itemSelect.jsp">トップ・ページ(商品検索のページ)に戻る</html:link>
   </body>
</html:html>
--------------------------------------------------------



◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆


続いて、CompleteOrderActionを見てみましょう。
下記に再度ソース・コードを提示します。

--------------------------------------------------------
package jp.co.flsi.lecture.struts;

import java.util.Vector;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import jp.co.flsi.lecture.reflect.ValueLogStringMaker;
import jp.co.flsi.lecture.struts.db.Order;
import jp.co.flsi.lecture.struts.db.OrderDbManager;
import jp.co.flsi.lecture.struts.db.OrderItem;
import jp.co.flsi.lecture.struts.db.StruShopDbException;
import jp.co.flsi.lecture.struts.db.User;

import org.apache.log4j.Logger;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class CompleteOrderAction extends Action {
   private static Logger logger = Logger.getLogger(CompleteOrderAction.class);

   public ActionForward execute(ActionMapping mapping, ActionForm form,
         HttpServletRequest request, HttpServletResponse response) {
      logger.info("Start ...............");
      OrderDbManager orderDb = new OrderDbManager();
      try {
         ValueLogStringMaker stringMaker = new ValueLogStringMaker();
         logger.info("Method parameter: <<<<<" + stringMaker.getValues("mapping", mapping));
         logger.info(">>>>>");
         logger.info("Method parameter: <<<<<" + stringMaker.getValues("form", form));
         logger.info(">>>>>");
         logger.info("Method parameter: <<<<<" + stringMaker.getValues("request", request));
         logger.info(">>>>>");
         logger.info("Method parameter: <<<<<" + stringMaker.getValues("response", response));
         logger.info(">>>>>");
         HttpSession session = request.getSession();
         Order anOrder = (Order)session.getAttribute("ORDER");
         if (anOrder == null) {
            logger.info("Method return: <<<<< cartVacant (1)");
            logger.info(">>>>>");
            return mapping.findForward("cartVacant");
         }
         Vector<OrderItem> orderItemList = anOrder.getOrderItems();
         if (orderItemList == null) {
            logger.info("Method return: <<<<< cartVacant (2)");
            logger.info(">>>>>");
            return mapping.findForward("cartVacant");
         }
         User user = (User)session.getAttribute("USER");
         if (user == null) {
            logger.info("Method return: <<<<< userVacant");
            logger.info(">>>>>");
            return mapping.findForward("userVacant");
         }
         orderDb.connect();
         orderDb.insertData(anOrder);
      } catch (StruShopDbException e) {
         logger.error(e, e);
      }
      catch (Throwable e) {
         logger.error(e, e);
      }
      finally {
         try {
            orderDb.disconnect();
         }
         catch (Exception e) {
            logger.info("Disconnect failed or there is no connection.");
         }
         logger.info("End ...............");
      }
      logger.info("Method return: <<<<< success");
      logger.info(">>>>>");
      return mapping.findForward("success");
   }

}
--------------------------------------------------------


ここでは、先ほどと同じ

return mapping.findForward("cartVacant");

のほかに、顧客情報がセッションに記憶されていない場合に

return mapping.findForward("userVacant");

を実行するようにしています。つまり、forwardに"userVacant"を設定
してreturnしています。



では、これらに対応して、先ほどと同様にstruts-config.xmlを編集し、
顧客情報のデータベース登録に失敗したときに表示するWebページ(userVacant.jsp
というファイル名にする)を作成する作業を下記の手順で実施しましょう。



◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆


(1) プロジェクト・エクスプローラーのStrutsShop配下のWebContent配下の
WEB-INF配下のstruts-config.xmlをダブル・クリックします。

(2) struts-config.xmlのフロー・エディターが開いたら、左側に並んでいる
アイコンのうち、「ページ」をクリックし、/completeorderのアイコンの左下
あたりの白い領域の中でクリックします。

(3) 貼り付いたアイコンの文字列を

/userVacant.jsp

に書き換えて下さい。

(4) 同様に、アイコンのうち、「進む」をクリックし、/completeorderのアイコン
をクリックし、続いて、以前貼り付けていた/cartVacantError.jspのアイコン
をクリックします。そうすると、2つのアイコンの間に矢印の線が引かれますね。
このままだと、この矢印線を引くモードのままになっているので、いったん「選択」
というアイコンをクリックすることによってモードを解除しておいて下さい。

(5) 先ほどの矢印線に「forward1」というような文字列が付いていると思いますが、
これを

cartVacant

に書き換えて下さい。

(6) 続いて再度、アイコンのうち、「進む」をクリックし、/completeorderのアイコン
をクリックし、次に、先ほど貼り付けた/userVacant.jspのアイコン
をクリックします。そうすると、2つのアイコンの間に矢印の線が引かれますね。
このままだと、この矢印線を引くモードのままになっているので、いったん「選択」
というアイコンをクリックすることによってモードを解除しておいて下さい。

(7) 先ほどの矢印線に「forward1」というような文字列が付いていると思いますが、
これを

userVacant

に書き換えて下さい。

(8) Ctrl + Sキーでファイルを保管しておきましょう。



◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆


このままだと、/userVacant.jspのアイコンに警告のマーク(丸みを帯びた
橙色の小さな三角形の中にエクスクラメーション・マーク(ビックリ・マーク)が
入ったアイコン)が付いていますが、これはuserVacant.jspというファイルが
実在しないからなので、これからそれを作成しましょう。

(1) /userVacant.jspのアイコンをダブル・クリックします。

(2) 「Struts JSPファイル」ウインドウが表示されたら、「完了」ボタンを
クリックします。

(3) userVacant.jspのエディターが開いたら、下記のように編集して保管しま
しょう。

--------------------------------------------------------
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-nested" prefix="nested" %>

<html:html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
      <title>お客様情報エラー</title>
   </head>
   <body bgcolor="#77ffff" text="#fa5a00">
      <h1>お客様情報エラー</h1>
      <font color="#ff0000">お客様の情報が見つからないため、処理を続行できません。</font>
      <br>
      まことに申し訳ありませんが、商品の検索から再度やり直してください。
      <br>
      <br>
      <html:link page="/itemSelect.jsp">トップ・ページ(商品検索のページ)に戻る</html:link>
   </body>
</html:html>
--------------------------------------------------------



以上で一通り作業が終わりましたが、最後にstruts-config.xmlがどうなっているのか、
struts-config.xmlのソース・エディターを開いて見て下さい。

struts-config.xmlのソース・コードの中の

--------------------------------------------------------
    <action path="/orderprocess" name="cartForm" type="jp.co.flsi.lecture.struts.OrderProcessAction" scope="request" validate="true" input="/cart.jsp">
      <forward name="success" path="/order.jsp"/>
      <forward name="cartVacant" path="/cartVacantError.jsp"/>
    </action>
    <action path="/confirmorder" name="orderForm" type="jp.co.flsi.lecture.struts.ConfirmOrderAction" scope="request" input="/order.jsp">
      <forward name="success" path="/confirmOrder.jsp"/>
      <forward name="cartVacant" path="/cartVacantError.jsp"/>
      <forward name="userInsertError" path="/userInsertError.jsp"/>
    </action>
    <action path="/completeorder" name="confirmOrderForm" type="jp.co.flsi.lecture.struts.CompleteOrderAction" scope="request" input="/confirmOrder.jsp">
      <forward name="success" path="/completeOrder.jsp"/>
      <forward name="cartVacant" path="/cartVacantError.jsp"/>
      <forward name="userVacant" path="/userVacant.jsp"/>
    </action>
--------------------------------------------------------

という行を見ると、以前より<forward>タグの行が増えていることがわかりますね。
すなわち、

--------------------------------------------------------
             ・
             ・
             ・
      <forward name="cartVacant" path="/cartVacantError.jsp"/>
             ・
             ・
             ・
      <forward name="cartVacant" path="/cartVacantError.jsp"/>
      <forward name="userInsertError" path="/userInsertError.jsp"/>
             ・
             ・
             ・
      <forward name="cartVacant" path="/cartVacantError.jsp"/>
      <forward name="userVacant" path="/userVacant.jsp"/>
--------------------------------------------------------

の行がそれぞれ追加されています。これらが先ほどフロー・エディターでビジュアル
に操作を行ったときに、自動的に生成されたコードです。



◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆


(次回に続く)


では、今日はここまでにします。



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
★ホームページ:
      http://www.flsi.co.jp/Java_text/
★このメールマガジンは
     「まぐまぐ(http://www.mag2.com)」
 を利用して発行しています。
★バックナンバーは
      http://www.flsi.co.jp/Java_text/
 にあります。
★このメールマガジンの登録/解除は下記Webページでできます。
      http://www.mag2.com/m/0000193915.html
★このメールマガジンへの質問は下記Webページにて受け付けて
 います。わからない所がありましたら、どしどしと質問をお寄
 せください。
      http://www.flsi.co.jp/Java_text/
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Copyright (C) 2010 Future Lifestyle Inc. 不許無断複製