広告

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                      2011年03月01日

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

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


========================================================
◆ 00.お知らせ(バックナンバーの閲覧に関して)
========================================================


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


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

では、これからこれらの状況を設定変更できるアプリケーションの実装をして
いきましょう。これは、以前お話したvol.216の

(2) 確定した注文については、状況をリスト表示し、料金支払い状況や配達状況
をいつでも確認/変更できるようにします。

に対する実装になります。



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

では、まず、支払い状況を変更できるようにするためのコーディングを行って
おきましょう。

支払い状況はラジオ・ボタンで選択する形式にしたいと思います。
Strutsでは、ラジオ・ボタンはhtml:radioというタグで提供されています
ので、これを使ってorderDetail.jspを変更しておきましょう。

では、orderDetail.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" %>

<table border="1" width="100%">
<tr>
  <td>
    <html:form method="POST" action="/orderstatuschange">
    <table border="0" width="100%">
    <tr>
      <td align="center">
       <b>注文の詳細</b>
      </td>
    </tr>
    <tr>
      <td>
        <br>
        <center>
          <table>
          <tr>
            <td>注文番号:</td>
            <td><bean:write name="ORDERSET" property="orderNumber"/></td>
          </tr>
          <tr>
            <td>注文日:</td>
            <td><bean:write name="ORDERSET" property="orderDate"/></td>
          </tr>
          <tr>
            <td>顧客番号:</td>
            <td><bean:write name="ORDERSET" property="userId"/></td>
          </tr>
          <tr>
            <td>支払い方法:</td>
            <td><bean:write name="ORDERSET" property="payMethodName"/></td>
          </tr>
          <tr>
            <td>支払い状況:</td>
            <td>
              <html:radio property="payment" value="true"/>支払い済み
              <html:radio property="payment" value="false"/>未払い
            </td>
          </tr>
          <tr>
            <td>配送状況:</td>
            <td>
               <logic:equal name="ORDERSET" property="delivery" value="0">未配達</logic:equal>
               <logic:equal name="ORDERSET" property="delivery" value="1">配達済み</logic:equal>
               <logic:equal name="ORDERSET" property="delivery" value="2">配達中</logic:equal>
            </td>
          </tr>
          </table>
        </center>
      </td>
    </tr>
    </table>
    <center><html:submit property="submit" value="状況を変更する" /></center>
    </html:form>
  </td>
</tr>
</table>
--------------------------------------------------------

上記のソース・コードの変更点は、ラジオ・ボタンを表示するように

              <html:radio property="payment" value="true"/>支払い済み
              <html:radio property="payment" value="false"/>未払い

を追加したことと、全体をFORMにしてデータをサーバーへ送れるようにするために

    <html:form method="POST" action="/orderstatuschange">



    <center><html:submit property="submit" value="状況を変更する" /></center>
    </html:form>

で囲んだことです。

┌補足─────────────────────────┐
 上記のラジオ・ボタンのコードでは、支払い状況の文字列
 (「支払い済み」や「未払い」)をJSPファイル内に直接書き
 込んでいますが、これらの文字列データがデータベースに
 一元化して保管してある場合にはデータベースから取り込んだ
 ものを表示するようにすることもできます。
 ただし、その文字列のデータ量(レコード数)が多量の場合は
 ラジオ・ボタンを使うと不体裁になってしまい、好ましくあり
 ません。その場合は、代わりにhtml:selectタグなどを使うの
 が賢明でしょう。
└───────────────────────────┘

ラジオ・ボタン(html:radioタグ)としては、「支払い済み」と「未払い」の
2つを用意したわけですが、このWebページを表示したときには、データベース
から読み取った支払い状況の値に応じて、これらのどちらかのラジオ・ボタン
を選択状態にしておかなければなりません。

そのためには、このFORM用のActionFormクラスを作成して、データベースから読み
取った値をpaymentプロパティーに渡してやっておく必要があります。

そのために、OrderDetailFormという名前でActionFormクラスを作成することに
しましょう。これはjp.co.flsi.lecture.struts.tilesパッケージ内に作成する
ことにします。

(1) プロジェクト・エクスプローラー内のStrutsShop配下の「Javaリソース: src」配下
のjp.co.flsi.lecture.struts.tilesパッケージを右クリックし、「新規」→「その他」
を選択します。

(2) 「新規」ウインドウにおいてAmateras配下のStruts配下のStruts ActionFormを選択
し、「次へ」ボタンをクリックします。

(3) 「Struts ActionForm」ウインドウにおいて「名前」欄に

OrderDetailForm

を入力し、「完了」ボタンをクリックします。

(4) OrderDetailForm.javaのエディターが開いたら、下記のようなソース・コード
を入力しましょう。

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

import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import jp.co.flsi.lecture.struts.ItemSelectForm;
import jp.co.flsi.lecture.struts.db.Order;

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

public class OrderDetailForm extends ActionForm {
   private static Logger logger = Logger.getLogger(ItemSelectForm.class);
   private boolean payment = false;

   public void reset(ActionMapping mapping, HttpServletRequest request) {
      logger.info("Start ...............");
      try {
         request.setCharacterEncoding("UTF-8");
         HttpSession session = request.getSession();
         Order order = (Order)session.getAttribute("ORDERSET");
         if (order != null) {
            setPayment(order.isPayment());
         }
      } catch (UnsupportedEncodingException e) {
         logger.error(e, e);
      }
      finally {
         logger.info("End ...............");
      }
   }

   public void setPayment(boolean payment) {
      this.payment = payment;
   }

   public boolean isPayment() {
      return payment;
   }

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

このソース・コードによって、sessionオブジェクトの中から取り出されたorderの
paymentプロパティーの値が、FORMのpaymentプロパティーに設定されることに
なります。この値はtrueかfalseのどちらかですが、これがtrueのときは先ほど
のorderDetail.jspのvalue="true"が指定されているほう、つまり「支払い済み」
のほうのラジオ・ボタンが選択状態になり、逆にfalseのときはvalue="false"が指定
されているほう、つまり「未払い」のほうのラジオ・ボタンが選択状態になります。



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

次に、orderDetail.jspのラジオ・ボタンを操作して支払い状況を変更したときに
その変更内容を実際にデータベースに書き込むようにするために、注文関連の
テーブルを更新するためのコーディングを行いましょう。

注文関連のデータベースへのアクセスはOrderDbManagerで行っていますので、
OrderDbManagerにテーブルを更新するためのメソッドを追加します。
updateOrderStatusというメソッド名にしてみましょう。

プロジェクト・エクスプローラー内のStrutsShop配下の「Javaリソース: src」配下
のjp.co.flsi.lecture.struts.dbパッケージ内のOrderDbManager.javaを開いて、
下記のようにupdateOrderStatus()メソッドを追加してみて下さい。

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

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.Vector;

import jp.co.flsi.lecture.reflect.ValueLogStringMaker;
import org.apache.log4j.Logger;

public class OrderDbManager extends DbManager  {
   private static Logger logger = Logger.getLogger(OrderDbManager.class);
   private String selectMaxONumSql = "SELECT MAX(O_NUM) FROM ORDERHEADER";
   private String insHeaderSql = "INSERT INTO ORDERHEADER  VALUES (?, ?, ?, ?, ?, ?, ?)";
   private String insItemSql = "INSERT INTO ORDERITEM  VALUES (?, ?, ?, ?)";

   private static final String selectOrderNumberSql = "SELECT * FROM ORDERHEADER, PAYMETHOD WHERE O_NUM = ? AND NUM = PAYMETHOD";
   private static final String selectAllOrdersSql = "SELECT * FROM ORDERHEADER, PAYMETHOD WHERE NUM = PAYMETHOD";

   private static final String updateOrdersSql = "UPDATE ORDERHEADER SET PAYMENT = ?, DELIVERY = ? WHERE O_NUM = ?";

   public boolean insertData(Order anOrder) throws StruShopDbException {
      logger.info("Start ...............");
      ValueLogStringMaker stringMaker = new ValueLogStringMaker();
      logger.info("Method parameter: <<<<<" + stringMaker.getValues("user", anOrder));
      logger.info(">>>>>");
      try {
         conn.setAutoCommit(false);
         Statement selectSt = conn.createStatement();
         PreparedStatement insHeaderPs = conn.prepareStatement(insHeaderSql);
         PreparedStatement insItemPs = conn.prepareStatement(insItemSql);
         ResultSet rs = selectSt.executeQuery(selectMaxONumSql);
         int newOrderNumber = 1;
         if (rs.next()) newOrderNumber = rs.getInt(1) + 1;
         insHeaderPs.setInt(1, newOrderNumber);
         insHeaderPs.setDate(2, new java.sql.Date((new Date()).getTime()));
         insHeaderPs.setString(3, anOrder.getUserType());
         insHeaderPs.setString(4, anOrder.getUserId());
         insHeaderPs.setInt(5, anOrder.getPayMethod());
         if (anOrder.isPayment()) {  // paymentの値がtrueなら
            insHeaderPs.setInt(6, 1);  // 支払い済み
         }
         else { // paymentの値がfalseなら
            insHeaderPs.setInt(6, 0);  // 未払い
         }
         insHeaderPs.setInt(7, 0);  // 未配達
         insHeaderPs.executeUpdate();
         int seqNum = 1;
         for (OrderItem oi : anOrder.getOrderItems()) {
            insItemPs.setInt(1, newOrderNumber);
            insItemPs.setInt(2, seqNum);
            insItemPs.setString(3, oi.getItemNum());
            insItemPs.setInt(4, oi.getOrderQuantity());
            insItemPs.executeUpdate();
            seqNum++;
         }
         selectSt.close();
         insHeaderPs.close();
         insItemPs.close();
         conn.commit();
      }
      catch (SQLException e) {
         try {
            conn.rollback();
            logger.info("Rollback executed.");
         }
         catch (Exception ex) {
            logger.info("Rollback failed.", ex);
         }
         logger.error(e, e);
         throw new StruShopDbException("Error: insertData() failed!", e);
      }
      catch (Throwable e) {
         try {
            conn.rollback();
            logger.info("Rollback executed.");
         }
         catch (Exception ex) {
            logger.info("Rollback failed.", ex);
         }
         logger.error(e, e);
         return false;
      }
      finally {
         logger.info("End ...............");
      }
      logger.info("Method return: <<<<< true");
      logger.info(">>>>>");
      return true;
   }

   public Vector<Order> getDataByNumber(int orderNumber) throws StruShopDbException {
      logger.info("Start ...............");
      ValueLogStringMaker stringMaker = new ValueLogStringMaker();
      logger.info("Method parameter: <<<<<" + stringMaker.getValues("orderNumber", orderNumber));
      logger.info(">>>>>");
      Vector<Order> orderList = new Vector<Order>();
      try {
         PreparedStatement selectPs = null;
         ResultSet rs;
         if (orderNumber == 0) {  // orderNumberが0(未指定)の場合
            selectPs = conn.prepareStatement(selectAllOrdersSql);
         }
         else {
            selectPs = conn.prepareStatement(selectOrderNumberSql);
            selectPs.setInt(1, orderNumber);
         }
         rs = selectPs.executeQuery();
         int payment = 0;
         while (rs.next()) {
            Order order = new Order();
            order.setOrderNumber(rs.getInt("O_NUM"));
            order.setOrderDate(rs.getDate("O_DATE"));
            order.setUserType(rs.getString("U_TYPE"));
            order.setUserId(rs.getString("USERID"));
            order.setPayMethod(rs.getInt("PAYMETHOD"));
            order.setPayMethodName(rs.getString("NAME"));
            payment = rs.getInt("PAYMENT");
            if (payment == 1) {  // 支払い済みの場合
               order.setPayment(true);
            }
            else {  // 未払いの場合
               order.setPayment(false);
            }
            order.setDelivery(rs.getShort("DELIVERY"));

            orderList.add(order);
         }
         selectPs.close();
      }
      catch (SQLException e) {
         logger.error(e, e);
         throw new StruShopDbException("Error: getDataByNumber() failed!", e);
      }
      catch (Throwable e) {
         logger.error(e, e);
      }
      finally {
         logger.info("End ...............");
      }
      logger.info("Method return: <<<<<" + stringMaker.getValues("orderList", orderList));
      logger.info(">>>>>");
      return orderList;
   }

   public boolean updateOrderStatus(Order anOrder) throws StruShopDbException {
      logger.info("Start ...............");
      ValueLogStringMaker stringMaker = new ValueLogStringMaker();
      logger.info("Method parameter: <<<<<" + stringMaker.getValues("anOrder", anOrder));
      logger.info(">>>>>");
      try {
         PreparedStatement updateSql = conn.prepareStatement(updateOrdersSql);
         if (anOrder.isPayment()) {  // paymentの値がtrueなら
            updateSql.setInt(1, 1);  // 支払い済み
         }
         else { // paymentの値がfalseなら
            updateSql.setInt(1, 0);  // 未払い
         }
         anOrder.getDelivery();
         updateSql.setInt(2, anOrder.getDelivery());
         updateSql.setInt(3, anOrder.getOrderNumber());
         int updateCount = 0;
         updateSql.executeUpdate();
         updateSql.close();
         conn.commit();
         if (updateCount == 0) {
            logger.info("***** No record updated! *****");
            // 更新されたレコードが0件の場合は、更新がなされなかったのでfalseを返す。
            return false;
         }
      }
      catch (SQLException e) {
         logger.error(e, e);
         throw new StruShopDbException("Error: updateOrderStatus() failed!", e);
      }
      finally {
         logger.info("End ...............");
      }
      logger.info(">>>>>");
      return true;
   }

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

このソース・コードは特に解説は必要ないですね。



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

続いて、orderDetail.jspのラジオ・ボタンを操作して支払い状況を変更したときに
その変更内容を実際にデータベースに書き込むようにするためのActionクラスを作成
してコーディングしておきましょう。
OrderStatusChangeActionというクラス名でjp.co.flsi.lecture.struts.tilesパッケー
ジ内に作成することにします。

(1) プロジェクト・エクスプローラー内のStrutsShop配下の「Javaリソース: src」配下
のjp.co.flsi.lecture.struts.tilesパッケージを右クリックし、「新規」→「その他」
を選択します。

(2) 「新規」ウインドウにおいてAmateras配下のStruts配下のStruts Actionを選択
し、「次へ」ボタンをクリックします。

(3) 「Struts Action」ウインドウにおいて「名前」欄に

OrderStatusChangeAction

を入力し、「完了」ボタンをクリックします。

(4) OrderStatusChangeAction.javaのエディターが開いたら、下記のようなソース・コード
を入力しましょう。

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

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.ItemListAction;
import jp.co.flsi.lecture.struts.db.Order;
import jp.co.flsi.lecture.struts.db.OrderDbManager;
import jp.co.flsi.lecture.struts.db.StruShopDbException;

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 OrderStatusChangeAction extends Action {
   private static Logger logger = Logger.getLogger(ItemListAction.class);

   public ActionForward execute(ActionMapping mapping, ActionForm form,
         HttpServletRequest request, HttpServletResponse response) {
      String forward = "success";
      logger.info("Start ...............");
      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(">>>>>");
      OrderDetailForm orderDetailForm = (OrderDetailForm) form;
      OrderDbManager orderDbManager = new OrderDbManager();
      HttpSession session = request.getSession();
      Order order = (Order)session.getAttribute("ORDERSET");
      order.setPayment(orderDetailForm.isPayment());
      try {
         orderDbManager.connect();
         orderDbManager.updateOrderStatus(order);
      } catch (StruShopDbException e) {
         logger.error(e, e);
         forward = "systemerror";
      }
      catch (Throwable e) {
         logger.error(e, e);
         forward = "systemerror";
      }
      finally {
         try {
            orderDbManager.disconnect();
         }
         catch (Exception e) {
            logger.info("Disconnect failed or there is no connection.");
         }
         logger.info("End ...............");
      }
      logger.info("Method return: <<<<< " + forward);
      logger.info(">>>>>");
      return mapping.findForward(forward);
   }

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

このソース・コードは特に解説は必要ないですね。



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

では、ここまで作成・編集したファイルをstruts-config.xmlに登録しましょう。

まずは、

    <form-bean name="orderDetailForm" type="jp.co.flsi.lecture.struts.tiles.OrderDetailForm"/>

というコードを追加することによってOrderDetailFormを登録し、

    <action path="/orderstatuschange" name="orderDetailForm" type="jp.co.flsi.lecture.struts.tiles.OrderStatusChangeAction" scope="request" input="tile.orderDetail">
      <forward name="success" path="/ordermanage.do"/>
      <forward name="systemerror" path="/systemerror.jsp"/>
    </action>

というコードを追加することによって、actionを登録します。
ちなみに、上記のようにforwardタグのpathには別のactionのpathを設定することも
できることに注目して下さい。ただし、この場合、上記の"/ordermanage.do"のように
後ろに.doを付けることに注意して下さい。


これらのコードを追加すると、struts-config.xmlの全体は下記のようになりますので、
プロジェクト・エクスプローラー内のStrutsShop配下のWebContent配下のWEB-INF配下の
struts-config.xmlを開いて(ソースを開いて)、下記のように編集してみて下さい。

--------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
  <data-sources>
  </data-sources>
  <form-beans>
    <form-bean name="itemSelectForm" type="jp.co.flsi.lecture.struts.ItemSelectForm"/>
    <form-bean name="itemListForm" type="jp.co.flsi.lecture.struts.ItemListForm"/>
    <form-bean name="cartForm" type="jp.co.flsi.lecture.struts.CartForm"/>
    <form-bean name="orderForm" type="jp.co.flsi.lecture.struts.OrderForm"/>
    <form-bean name="confirmOrderForm" type="org.apache.struts.action.DynaActionForm"/>
    <form-bean name="userRegForm" type="jp.co.flsi.lecture.struts.UserRegForm"/>
    <form-bean name="orderListForm" type="org.apache.struts.action.DynaActionForm">
      <form-property name="selectedOrderNumber" type="java.lang.Integer" initial="1"/>
    </form-bean>
    <form-bean name="orderDetailForm" type="jp.co.flsi.lecture.struts.tiles.OrderDetailForm"/>
  </form-beans>
  <global-exceptions>
  </global-exceptions>
  <global-forwards>
  </global-forwards>
  <action-mappings>
    <action path="/itemlist" name="itemSelectForm" type="jp.co.flsi.lecture.struts.ItemListAction" scope="request" input="/itemSelect.jsp">
      <forward name="success" path="/itemList.jsp"/>
      <forward name="systemerror" path="/systemerror.jsp"/>
    </action>
    <action path="/cart" name="itemListForm" type="jp.co.flsi.lecture.struts.CartAction" scope="request" input="/itemList.jsp">
      <forward name="success" path="/cart.jsp"/>
      <forward name="systemerror" path="/systemerror.jsp"/>
    </action>
    <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"/>
      <forward name="systemerror" path="/systemerror.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"/>
      <forward name="newUser" path="/userReg.jsp"/>
      <forward name="useridInvalid" path="/useridInvalid.jsp"/>
      <forward name="passwordInvalid" path="/passwordInvalid.jsp"/>
      <forward name="systemerror" path="/systemerror.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"/>
      <forward name="tokenInvalid" path="/tokenInvalid.jsp"/>
      <forward name="systemerror" path="/systemerror.jsp"/>
    </action>
    <action path="/userreg" name="userRegForm" type="jp.co.flsi.lecture.struts.UserRegistrationAction" scope="request" input="/userReg.jsp">
      <forward name="success" path="/confirmOrder.jsp"/>
      <forward name="cartVacant" path="/cartVacantError.jsp"/>
      <forward name="userInsertError" path="/userInsertError.jsp"/>
      <forward name="systemerror" path="/systemerror.jsp"/>
    </action>
    <action path="/ordermanage" type="jp.co.flsi.lecture.struts.tiles.OrderListAction" scope="request">
      <forward name="success" path="tile.orderList"/>
      <forward name="systemerror" path="/systemerror.jsp"/>
    </action>
    <action path="/orderdetail" name="orderListForm" type="jp.co.flsi.lecture.struts.tiles.OrderDetailAction" scope="request" input="tile.orderList">
      <forward name="success" path="tile.orderDetail"/>
      <forward name="systemerror" path="/systemerror.jsp"/>
    </action>
    <action path="/orderstatuschange" name="orderDetailForm" type="jp.co.flsi.lecture.struts.tiles.OrderStatusChangeAction" scope="request" input="tile.orderDetail">
      <forward name="success" path="/ordermanage.do"/>
      <forward name="systemerror" path="/systemerror.jsp"/>
    </action>
  </action-mappings>
  <controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>
  <message-resources parameter="MessageResources"/>
  <plug-in className="org.apache.struts.tiles.TilesPlugin">
    <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml"/>
    <set-property property="moduleAware" value="true"/>
  </plug-in>
  <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
  </plug-in>
</struts-config>
--------------------------------------------------------



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

この段階で、一度、動作確認をしてみましょう。

(1) 「サーバー」ビューの中の「ローカル・ホストのTomcat v5.5サーバー」を
右クリックし、「開始」を選択します。しばらくして、

ローカル・ホストのTomcat v5.5サーバー[始動済み,同期済み]

というように、後ろに「始動済み」の表示が出たら、Tomcatの起動が完了しています。

(2) Webブラウザー(Internet Explorer)を起動して、URL

http://localhost:8080/StrutsShop/tiles-parts/index.jsp

または、

http://localhost:8080/StrutsShop/tiles-parts/

を入力しましょう。

(3) 注文のリストが表示されますので、その中のどれかの注文番号(たとえば 1)を
クリックしましょう。

(4) 注文の詳細のWebページが開いたら、「支払い状況」を変更してみましょう。
現在は「未払い」のほうが選択された状態になっているでしょうから、「支払い済み」
のほうに選択を変更してみて下さい。そして、「状況を変更する」ボタンをクリック
します。

そうすると、注文のリストに戻りますが、今度は先ほどの注文の「支払い状況」が
「支払い済み」のほうに変わっていますね。

これでOKです。



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

では続いて、配達状況のほうも変更できるようにしましょう。


(次回に続く)



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
★ホームページ:
      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) 2011 Future Lifestyle Inc. 不許無断複製