広告 |
---|
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 2010年05月02日 Java総合講座 - 初心者から達人へのパスポート vol.202 セルゲイ・ランダウ バックナンバー: http://www.flsi.co.jp/Java_text/ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ------------------------------------------------------- ・現在、このメールマガジンは以下の2部構成になっています。 [1] 当初からのコース:毎週日曜の夜に発行 これは現在、中級レベルになっています。 [2] 2009年11月開講コース:毎週水曜の夜に発行 これは現在、初心者向けのレベルになっています。 ・このメールマガジンは、画面を最大化して見てください。 小さな画面で見ていると、不適切な位置で行が切れてしまう など、問題を起すことがあります。 ・このメールマガジンに掲載されているソース・コード及び 文章は特に断らない限り、すべて筆者が著作権を所有してい ます。また、これらのソース・コードは学習用のためだけに 提供しているものです。 ------------------------------------------------------- ======================================================== ◆ 01.Strutsのアプリケーション開発(プロジェクト:StrutsShop) ======================================================== 念のために、前回提示した副次的な処理の流れを再度提示しておきます。 -------------------------------------------------------- (U-7) 注文のためのWebページが開く。 [order.jsp] (U-8a-1) (これから会員登録する顧客の場合)「新規に会員登録する」 という項目を選択する。支払い方法(クレジット・カード払い/銀行振り込み) を選択し、「注文内容の確認」ボタン(「新規会員登録」ボタンも兼務) を押す。 [confirmorder.do]→[ConfirmOrderAction.java] (U-8a-2) 会員登録のためのWebページが開く。 [userReg.jsp] (U-8a-3) 顧客の住所・氏名・連絡先・ユーザーID・パスワードを入力し、 「会員登録」ボタンを押す。 [userreg.do]→[UserRegistrationAction.java] (U-9) 注文確認のためのWebページが開く。 [confirmOrder.jsp] -------------------------------------------------------- -------------------------------------------------------- (U-8a-3) 顧客の住所・氏名・連絡先・ユーザーID・パスワードを入力し、 「会員登録」ボタンを押す。 [userreg.do]→[UserRegistrationAction.java] (U-8a-3r-1) (ユーザーIDが既存のものと重複していた場合)会員登録の ためのWebページが再度開く。このとき「重複エラー」を表示する。 [userReg.jsp] (U-8a-3r-2) 顧客の住所・氏名・連絡先・ユーザーID・パスワードを入力し直し、 「会員登録」ボタンを押す。 [userreg.do]→[UserRegistrationAction.java] (U-9) 注文確認のためのWebページが開く。 [confirmOrder.jsp] -------------------------------------------------------- 前回は、ConfirmOrderActionクラスを編集して、新しくいくつかのforwardの値を 設定するコードを追加しました。 そのうちの一つは、新規に会員登録する場合に return mapping.findForward("newUser"); を実行することです。 つまり、forwardの値が"newUser"のときに(U-8a-2)の会員登録のためのWebページ (userReg.jsp)へと進むことになります。 では、このuserReg.jspというJSPファイルを作成しましょう。 vol.200のように、先にフロー・エディターでstruts-config.xmlを編集して、 forwardの値とJSPファイルのファイル名の関係付けをstruts-config.xmlに記述して しまえばJSPファイルの雛型を自動的に生成できるので楽ですが、いつも同じ手順では 芸がないので、今回は先に自分でJSPファイルを作成してみましょう。 ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ では、下記のようにして、userReg.jspを作成しましょう。 (1) プロジェクト・エクスプローラーのStrutsShop配下のWebContentを 右クリックし、「新規」→「その他」を選択します。 (2) 「新規」ウインドウにおいて、「Amateras」配下の「Struts」配下の 「Struts JSPファイル」を選択し、「次へ」ボタンをクリックします。 (3) 「Struts JSPファイル」ウインドウにおいて、「ファイル名」欄を userReg.jsp に変更して、「完了」ボタンをクリックします。 (4) userReg.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> <html:form method="POST" action="/userreg"> <br> <br> お好みのユーザーIDとパスワードを入力して下さい。 <br> <html:errors property="userid" /> <html:errors property="password" /> <table border="0"> <tr> <th>ユーザーID:</th> <td><html:text property="userid" size="7" /></td> </tr> <tr> <th>パスワード:</th> <td><html:password property="password" size="10" redisplay="false" /></td> </tr> </table> <br> 下の各欄にお客様のお名前・ご住所等をご入力ください。 <br> <html:errors property="name" /> <html:errors property="zipcode" /> <html:errors property="address" /> <html:errors property="telNo" /> <html:errors property="emailAddress" /> <table border="0"> <tr> <th>お名前:</th> <td><html:text property="name" size="20" /></td> </tr> <tr> <th>郵便番号:</th> <td><html:text property="zipcode" size="8" /></td> </tr> <tr> <th>ご住所:</th> <td><html:text property="address" size="100" /></td> </tr> <tr> <th>お電話番号:</th> <td><html:text property="telNo" size="12" /></td> </tr> <tr> <th>Eメール・アドレス:</th> <td><html:text property="emailAddress" size="30" /></td> </tr> </table> <br> <br> <html:submit property="submit" value="会員登録し最終購入確認画面に進む" /> </html:form> <br> <html:link page="/itemSelect.jsp">トップ・ページ(商品検索のページ)に戻る</html:link> </body> </html:html> -------------------------------------------------------- ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ 次に、このuserReg.jspに対応するActionFormクラスとしてUserRegFormというクラスを 作成しましょう。 (1) プロジェクト・エクスプローラーのStrutsShop配下の「Javaリソース: src」配下 のjp.co.flsi.lecture.struts(パッケージ名)を右クリックし、「新規」→「その他」 を選択します。 (2) 「新規」ウインドウにおいて、「Amateras」配下の「Struts」配下の 「Struts ActionForm」を選択し、「次へ」ボタンをクリックします。 (3) 「Struts ActionForm」ウインドウにおいて、「名前」欄を UserRegForm に変更して、「完了」ボタンをクリックします。 (4) UserRegForm.javaファイルが生成され、そのエディターが開きますので、 下記のように編集しましょう。 -------------------------------------------------------- package jp.co.flsi.lecture.struts; import java.io.UnsupportedEncodingException; import javax.servlet.http.HttpServletRequest; import jp.co.flsi.lecture.reflect.ValueLogStringMaker; import org.apache.log4j.Logger; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; public class UserRegForm extends ActionForm { private static Logger logger = Logger.getLogger(UserRegForm.class); private String name = null; private String zipcode = null; private String address = null; private String telNo = null; private String emailAddress = null; private String userid = null; private String password = null; public void reset(ActionMapping mapping, HttpServletRequest request) { logger.info("Start ..............."); try { request.setCharacterEncoding("UTF-8"); } catch (UnsupportedEncodingException e) { logger.error(e, e); } finally { logger.info("End ..............."); } } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setZipcode(String zipcode) { this.zipcode = zipcode; } public String getZipcode() { return zipcode; } public void setAddress(String address) { this.address = address; } public String getAddress() { return address; } public void setTelNo(String telNo) { this.telNo = telNo; } public String getTelNo() { return telNo; } public void setEmailAddress(String emailAddress) { this.emailAddress = emailAddress; } public String getEmailAddress() { return emailAddress; } public void setUserid(String userid) { this.userid = userid; } public String getUserid() { return userid; } public void setPassword(String password) { this.password = password; } public String getPassword() { return password; } public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { logger.info("Start ..............."); ValueLogStringMaker stringMaker = new ValueLogStringMaker(); ActionErrors errors = new ActionErrors(); try { logger.info("Method parameter: <<<<<" + stringMaker.getValues("mapping", mapping)); logger.info(">>>>>"); logger.info("Method parameter: <<<<<" + stringMaker.getValues("request", request)); logger.info(">>>>>"); if (userid.equals("")) { errors.add("userid", new ActionMessage("errors.userid.required")); } if (password.equals("")) { errors.add("password", new ActionMessage("errors.password.required")); } if (name.equals("")) { errors.add("name", new ActionMessage("errors.name.required")); } if (zipcode.equals("")) { errors.add("zipcode", new ActionMessage("errors.zipcode.required")); } if (address.equals("")) { errors.add("address", new ActionMessage("errors.address.required")); } if (telNo.equals("")) { errors.add("telNo", new ActionMessage("errors.telNo.required")); } if (emailAddress.equals("")) { errors.add("emailAddress", new ActionMessage("errors.emailAddress.required")); } } catch (Throwable e) { logger.error(e, e); } finally { logger.info("End ..............."); } logger.info("Method return: <<<<<" + stringMaker.getValues("errors", errors)); logger.info(">>>>>"); return (errors); } } -------------------------------------------------------- ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ では、続いて(U-8a-3)のUserRegistrationAction.javaファイルを作成しましょう。 (1) プロジェクト・エクスプローラーのStrutsShop配下の「Javaリソース: src」配下 のjp.co.flsi.lecture.struts(パッケージ名)を右クリックし、「新規」→「その他」 を選択します。 (2) 「新規」ウインドウにおいて、「Amateras」配下の「Struts」配下の 「Struts Action」を選択し、「次へ」ボタンをクリックします。 (3) 「Struts Action」ウインドウにおいて、「名前」欄を UserRegistrationAction に変更して、「完了」ボタンをクリックします。 (4) UserRegistrationAction.javaファイルが生成され、そのエディターが開きますので、 下記のように編集しましょう。 -------------------------------------------------------- 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.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 UserRegistrationAction extends Action { private static Logger logger = Logger.getLogger(UserRegistrationAction.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"); // 当Webアプリでは商品の購入をする者のみ会員登録を可能とする。 if (anOrder == null) { logger.info("Method return: <<<<< cartVacant (1)"); logger.info(">>>>>"); return mapping.findForward("cartVacant"); } Vector<OrderItem> orderItemList = anOrder.getOrderItems(); // 当Webアプリでは商品の購入をする者のみ会員登録を可能とする。 if (orderItemList == null) { logger.info("Method return: <<<<< cartVacant (2)"); logger.info(">>>>>"); return mapping.findForward("cartVacant"); } UserRegForm userRegForm = (UserRegForm) form; User user = new User(); user.setUserType("R"); // 会員登録した顧客のユーザー・タイプは"R" user.setUserid(userRegForm.getUserid()); user.setPassword(PasswordEncryption.encrypt(userRegForm.getPassword())); user.setName(userRegForm.getName()); user.setZipcode(userRegForm.getZipcode()); user.setAddress(userRegForm.getAddress()); user.setTelno(userRegForm.getTelNo()); user.setEmail(userRegForm.getEmailAddress()); userDbManager.connect(); if (!userDbManager.insertData(user)) { logger.info("Method return: <<<<< userInsertError"); logger.info(">>>>>"); return mapping.findForward("userInsertError"); } anOrder.setUserType(user.getUserType()); anOrder.setUserId(user.getUserid()); 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"); } } -------------------------------------------------------- ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ では、これらのファイルをstruts-config.xmlに登録しましょう。 (1) プロジェクト・エクスプローラーのStrutsShop配下のWebContent配下の WEB-INF配下のstruts-config.xmlをダブル・クリックします。 (あるいは、フロー・エディターを確実に開くためには、WEB-INF配下の struts-config.xmlを右クリック→「アプリケーションから開く」→ 「struts-config.xmlエディター」を選択します。) (2) struts-config.xmlのフロー・エディターが開いたら(画面がかなり 混み合ってきましたので)「struts-config.xml」タブをダブル・クリック してエディターを最大化しておきましょう。(元に戻すには再度タブを ダブル・クリック) (3) フロー・エディターの左側に並んでいるアイコンのうち、「ページ」を クリックし、/confirmorderのアイコンの右上あたりの空いている白い領域を クリックします。 (4) 貼り付いたアイコンの文字列を /userReg.jsp に書き換えて下さい。(文字列を書き換えるには文字列を2回クリック (ダブル・クリックではない。1回目のクリックで選択、2回目のクリック で文字列の変更の意味になる)します。) (5) 続いて、左側に並んでいるアイコンのうち、「進む」をクリックし、 /confirmorderのアイコンをクリックし、次に、先ほど貼り付けた /userReg.jspのアイコンをクリックします。 そうすると、2つのアイコンの間に矢印の線が引かれますね。 このままだと、この矢印線を引くモードのままになっているので、いったん「選択」 というアイコンをクリックすることによってモードを解除しておいて下さい。 (6) 先ほどの矢印線に「forward1」というような文字列が付いていると思いますが、 これを newUser に書き換えて下さい。 (7) 続いて、左側に並んでいるアイコンのうち、「アクション」をクリックし、 先ほど貼り付けた/userReg.jspのアイコンの下あたりの空いた白い領域をクリック します。 (8) そこにアイコンが貼り付いて、「/action1」という文字列が付いている と思いますが、この文字列を /userreg に書き換えて下さい。 (9) 同様に、左側に並んでいるアイコンのうち、「入力」をクリックし、 先ほど貼り付けた/userReg.jspのアイコンをクリックし、続いて、/userreg のアイコンをクリックします。 (10) 同様に、左側に並んでいるアイコンのうち、「進む」をクリックし、 先ほど貼り付けた「/userreg」のアイコンをクリックし、続いて、/confirmOrder.jsp のアイコンをクリックします。そうすると、2つのアイコンの間に矢印の線が引かれ ますね。このままだと、この矢印線を引くモードのままになっているので、いったん 「選択」というアイコンをクリックすることによってモードを解除しておいて下さい。 (11) 先ほどの矢印線に「forward1」というような文字列が付いていると思いますが、 これも同様にして success に書き換えて下さい。 (12) 最後に、Ctrl + Sキーでファイルを保管しておきましょう。 さて、この状態でstruts-config.xmlのフロー・エディターを見ると、先ほど作成 しておいたuserReg.jspについては警告のマークはつきませんが、/userregには 警告のマークがついていますね。 ちなみに、その/userregアイコンをダブル・クリックしてみて下さい。 「クラス名が指定されていません。」というメッセージが表示されますね。 これは、userreg.doに対して実行されるべきUserRegistrationActionというクラス名 ((U-8a-3)参照)がまだ指定されていないために警告されているのです。 これは、フロー・エディターでは指定できませんので、画面下のほうの「ソース」タブ をクリックしてソース・エディターに切り替えましょう。 そして、 <action path="/userreg" input="/userReg.jsp"> の行を <action path="/userreg" name="userRegForm" type="jp.co.flsi.lecture.struts.UserRegistrationAction" scope="request" input="/userReg.jsp"> に書き換えましょう。 また、この中のuserRegFormに対するクラス(UserRegForm)を登録するために、 <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-beans> の部分を <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> に変更(userRegFormに関する1行を追加しただけ)しましょう。 そして、このファイルを保管(Ctrl + Sキー)しておきましょう。 ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ では、動作確認をしてみましょう。 ┌補足─────────────────────────┐ PCの性能が不十分だったり、Webアプリケーションをたくさん 詰め込み過ぎると、サーバーを起動するときに「サーバー ロー カル・ホスト の Tomcat v5.5 サーバー は 45 秒内に始動でき ませんでした。サーバーがより多くの時間を必要とする場合、 サーバー・エディターでタイムアウトを大きくしてください。」 というようなエラーが出てサーバーが起動できない場合があり ます。その場合は、以下の手順でタイムアウトを大きくしてく ださい。 (1) 「サーバー」ビューにおいて「ローカル・ホストのTomcat v5.5 サーバー」を右クリックし、「開く」を選択する。 (2) 「ローカル・ホストのTomcat v5.5 サーバー」のエディター が開くので、その中の「タイム・アウト」の(項目をクリック し、その)配下の「開始」欄を45(デフォルト値)から大きい値 に変更する。 (3) 保管(Ctrl+S)してから「ローカル・ホストのTomcat v5.5 サーバー」のエディターを閉じる。 └───────────────────────────┘ (1) 「サーバー」ビューの中の「ローカル・ホストのTomcat v5.5サーバー」を 右クリックし、「開始」を選択します。しばらくして、 ローカル・ホストのTomcat v5.5サーバー[始動済み,同期済み] というように、後ろに「始動済み」の表示が出たら、Tomcatの起動が完了しています。 (2) Webブラウザー(Internet Explorer)を起動して、URL http://localhost:8080/StrutsShop/itemSelect.jsp を入力しましょう。 (3) 「商品の検索」のWebページが開いたら、そのまま「商品検索」ボタンをクリック して、次の「商品のリスト」のWebページでは全ての選択欄にチェックマークを入れて 「買物かごに入れる」ボタンをクリックしましょう。 (4) 「ショッピング・カートの中のリスト」のWebページが開いたら、そのまま 「これらの商品を購入する」ボタンをクリックしましょう。 (5) 「購入する商品」のWebページが開いたら、「お支払い方法」欄は 「クレジット・カード払い」のままにし、「新規に会員登録する」を選択 (その左側の丸の中をクリック)し、「最終購入確認または新規会員登録の画面に進む」 ボタンをクリックしましょう。 (6) 「会員登録」のWebページが開いたら、「ユーザーID」欄には、例えば user01 と入力し、「パスワード」欄には、例えば pass01 と入力し、「お名前」欄、「郵便番号」欄、「ご住所」欄、「お電話番号」欄、 「Eメール・アドレス」欄をそれぞれ適当に入力し、 「会員登録し最終購入確認画面に進む」ボタンをクリックしましょう。 (ただし、「ご住所」欄の番地は「1-2-3」のようにハイフンを半角で入力し、全角では 入力しないで下さい。その理由は、あとでLinuxへデプロイする段階になったときに まとめて説明します。) (7) 購入(注文)内容の確認のWebページが開いたら、「購入(注文確定)する」ボタン をクリックして下さい。 (8) 注文完了のWebページ(「下記のご注文を受け付けました。」のWebページ)が 開いたら、商品のリストが正しいことを確認して下さい。 また、「トップ・ページ(商品検索のページ)に戻る」のリンクをクリックします。 (9) 「商品の検索」のWebページが開いたら、カテゴリーは「雑貨」を選択し、 「商品検索」ボタンをクリックして、次の「商品のリスト」のWebページでは 全ての選択欄にチェックマークを入れて「買物かごに入れる」ボタンをクリッ クしましょう。 (10) 「ショッピング・カートの中のリスト」のWebページが開いたら、そのまま 「これらの商品を購入する」ボタンをクリックしましょう。 (11) 「購入する商品」のWebページが開いたら、「お支払い方法」欄は 「クレジット・カード払い」のままにし、「会員登録済み」を選択(その左側 の丸の中をクリック)し、「ユーザーID」欄に、先ほどの会員登録のときの user01 を入力し、「パスワード」欄に、先ほどの会員登録のときの pass01 を入力し、「最終購入確認または新規会員登録の画面に進む」ボタンを クリックしましょう。 (12) 購入(注文)内容の確認のWebページが開いたら、先ほどの会員登録のときに 入力したのと同じ郵便番号、住所、氏名が表示されていることを確認し、 「購入(注文確定)する」ボタンをクリックして下さい。 (13) 注文完了のWebページ(「下記のご注文を受け付けました。」のWebページ)が 開いたら、商品のリストが正しいことを確認して下さい。 また、EclipseのDBViewerでORDERHEADERテーブルとORDERITEMテーブルと USERテーブルを表示して、正しくデータが登録されていることを確認して 下さい。 (DBViewerの操作方法を忘れた人は、vol.084などを復習のこと。) ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ (次回に続く) ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ★ホームページ: 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. 不許無断複製 |