広告 |
---|
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 2011年02月12日 Java総合講座 - 初心者から達人へのパスポート vol.216(の続き) セルゲイ・ランダウ バックナンバー: http://www.flsi.co.jp/Java_text/ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ======================================================== ◆ 00.お知らせ(バックナンバーの閲覧に関して) ======================================================== ------------------------------------------------------- ・現在、このメールマガジンは以下の2部構成になっています。 [1] 当初からのコース:vol.xxx(xxxは番号)が振られています。 これは現在、中級レベルになっています。 [2] 2009年11月開講コース:xxx号(xxxは番号)が振られています。 これは現在、初心者向けのレベルになっています。 ・このメールマガジンは、画面を最大化して見てください。 小さな画面で見ていると、不適切な位置で行が切れてしまう など、問題を起すことがあります。 ・このメールマガジンに掲載されているソース・コード及び 文章は特に断らない限り、すべて筆者が著作権を所有してい ます。また、これらのソース・コードは学習用のためだけに 提供しているものです。 ------------------------------------------------------- ======================================================== ◆ 01.Strutsのアプリケーション開発(プロジェクト:StrutsShop) --- Tiles --- ======================================================== さて、このアプリケーションの操作としては、各Webページをそれぞれ 次のような手順で開くことにしましょう。 (O-1) Webブラウザー(Internet Explorer)上で上記(前回の最後)のindex.jsp を呼び出すためのURLを入力することにより、注文のリストのWebページが開く。 [このとき実行されるActionクラスの名前はOrderListActionとする。] (O-2) 注文のリストのWebページ上で詳細を見たい注文の注文番号をクリック すると、個々の注文の詳細を表示するWebページが開く。 [このとき実行されるActionクラスの名前はOrderDetailActionとする。] では、これらのActionクラスを作っていくことにしますが、その前に これらのOrder関係のActionクラスから呼び出されることになるデータベース アクセスのメソッドを先に作成しておきましょう。 なお、Order関係のデータベースにアクセスするクラスは既にOrderDbManager というクラス名で作られているので、これにメソッドを追加することにします。 (時間と解説量を節約するため、クラスやパッケージを既存のものと共有します。) 基本的には、注文番号を指定すると該当するデータ(レコード)をORDERHEADERテーブル から取り出すメソッドと、全てのレコードを取り出すメソッドを作成した いのですが、話を簡単にするために注文番号を指定すると該当するレコードを 取り出すメソッドをgetDataByNumber()というメソッド名で作成し、注文番号 に0を指定した場合には同じメソッドが全てのレコードを取り出してくれる ようにプログラミングすることにします。(注文番号は1以上にしてデータベース に書き込むようにしているので、注文番号が0というレコードは存在しないから、 これで問題ない。) ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ では、OrderDbManager.javaを開いて、下記のように編集して下さい。 (プロジェクト・エクスプローラー内のStrutsShop配下の「Javaリソース: src」配下 のjp.co.flsi.lecture.struts.dbの配下のOrderDbManager.javaを開いて編集する。) -------------------------------------------------------- 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 WHERE O_NUM = ?"; private static final String selectAllOrdersSql = "SELECT * FROM ORDERHEADER"; 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")); 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; } } -------------------------------------------------------- これも、特に解説する必要はありませんね。 ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ では、続いてActionクラスを作成していきましょう。 これらのActionクラスは(StrutsのTilesの学習用という意味を込めて) jp.co.flsi.lecture.struts.tiles という名前のパッケージに入れることにします。 まず、パッケージを作成しましょう。 (1) プロジェクト・エクスプローラー内のStrutsShop配下の「Javaリソース: src」 を右クリックし、「新規」→「パッケージ」を選択します。 (2) 「新規Javaパッケージ」ウインドウにおいて「名前」欄に jp.co.flsi.lecture.struts.tiles と入力し、「完了」ボタンをクリックします。 ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ 続いて、このjp.co.flsi.lecture.struts.tilesの中にOrderListActionを作成 しましょう。 (1) プロジェクト・エクスプローラー内の(StrutsShopプロジェクトの) jp.co.flsi.lecture.struts.tiles(パッケージ)を右クリックし、 「新規」→「その他」を選択します。 (2) 「新規」ウインドウで「Amateras」配下の「Struts」配下の「Struts Action」を選択し、 「次へ」ボタンをクリックします。 (3) 「Struts Action」ウインドウにおいて「名前」欄に OrderListAction を入力し、「完了」ボタンをクリックします。 では、OrderListAction.javaを下記のように編集して下さい。 -------------------------------------------------------- package jp.co.flsi.lecture.struts.tiles; import java.util.Vector; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 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.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 OrderListAction extends Action { private static Logger logger = Logger.getLogger(OrderListAction.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(">>>>>"); OrderDbManager orderDbManager = new OrderDbManager(); try { orderDbManager.connect(); Vector<Order> orderList = null; orderList = orderDbManager.getDataByNumber(0); request.setAttribute("orderList", orderList); } 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); } } -------------------------------------------------------- このソース・コードの中の request.setAttribute("orderList", orderList); という行における"orderList"という名前が、先ほどのorderList.jspファイルの中の <logic:iterate id="order" name="orderList" scope="request"> という行の"orderList"と一致させられていることに注意して下さい。 あとは、特に解説の必要はありませんね。 ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ 次に、OrderDetailActionを作成しましょう。 (1) プロジェクト・エクスプローラー内の(StrutsShopプロジェクトの) jp.co.flsi.lecture.struts.tiles(パッケージ)を右クリックし、 「新規」→「その他」を選択します。 (2) 「新規」ウインドウで「Amateras」配下の「Struts」配下の「Struts Action」を選択し、 「次へ」ボタンをクリックします。 (3) 「Struts Action」ウインドウにおいて「名前」欄に OrderDetailAction を入力し、「完了」ボタンをクリックします。 では、OrderDetailAction.javaを下記のように編集して下さい。 -------------------------------------------------------- package jp.co.flsi.lecture.struts.tiles; 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.StruShopDbException; import org.apache.commons.beanutils.DynaBean; 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 OrderDetailAction extends Action { private static Logger logger = Logger.getLogger(OrderDetailAction.class); public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { logger.info("Start ..............."); String forward = "success"; 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(); orderDb.connect(); DynaBean dynaForm = (DynaBean) form; int orderNum = (Integer) dynaForm.get("selectedOrderNumber"); if (orderNum == 0) { // もし注文番号(selectedOrderNumber)が0の場合 // (データベース上では注文番号が0はありえない!) logger.info("Method return: <<<<< systemerror: selectedOrderNumber Invalid"); logger.info(">>>>>"); return mapping.findForward("systemerror"); } Vector<Order> orders = orderDb.getDataByNumber(orderNum); Order order = orders.get(0); // 一つの注文番号で取得できるのは1レコードのみ session.setAttribute("ORDERSET", order); } catch (StruShopDbException e) { logger.error(e, e); forward = "systemerror"; } catch (Throwable e) { logger.error(e, e); forward = "systemerror"; } finally { try { orderDb.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); } } -------------------------------------------------------- このソース・コードも同じく、 session.setAttribute("ORDERSET", order); という行の中の"ORDERSET"という名前が、先ほどのorderDetail.jspファイルの中の <bean:write name="ORDERSET" property="orderNumber"/> などのコードの中の"ORDERSET"と一致させられていることに注意して下さい。 あとは、特に解説する必要はありませんね。 ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ では続いて、struts-config.xmlファイルの中にactionタグの追加と、先ほどの DynaActionFormの記述を行いましょう。 (プロジェクト・エクスプローラー内のStrutsShop配下のWebContent配下の WEB-INF配下のstruts-config.xmlを開いて下さい。) 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-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-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> -------------------------------------------------------- これに下記のようなコードを追加しましょう。 [<form-beans>から</form-beans>までの間に以下を追加] <form-bean name="orderListForm" type="org.apache.struts.action.DynaActionForm"> <form-property name="selectedOrderNumber" type="java.lang.Integer" initial="1"/> </form-bean> [<action-mappings>から</action-mappings>までの間に以下を追加] <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> これらの追加を含めると、全体は下記のようになります。 -------------------------------------------------------- <?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-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-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)を クリックしましょう。 注文の詳細のWebページが開きますね。 どうですか、期待通りに動きましたか。 どちらのWebページも先ほどのレイアウトになっていることがわかりましたね。 そして、タイトルと本体(body)の部分はページごとに違っていますね。 (なお、支払い方法や支払い状況、配達状況に数字やtrue/falseなどのわかりずらい値 を表示するなど、体裁の悪いところがありますが、これらも次回に修正していきます。) ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ (次回に続く) ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ★ホームページ: 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. 不許無断複製 |