広告 |
---|
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 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. 不許無断複製 |