広告 |
---|
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 2011年02月06日 Java総合講座 - 初心者から達人へのパスポート vol.216 セルゲイ・ランダウ バックナンバー: http://www.flsi.co.jp/Java_text/ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ------------------------------------------------------- ・現在、このメールマガジンは以下の2部構成になっています。 [1] 当初からのコース:vol.xxx(xxxは番号)が振られています。 これは現在、中級レベルになっています。 [2] 2009年11月開講コース:xxx号(xxxは番号)が振られています。 これは現在、初心者向けのレベルになっています。 ・このメールマガジンは、画面を最大化して見てください。 小さな画面で見ていると、不適切な位置で行が切れてしまう など、問題を起すことがあります。 ・このメールマガジンに掲載されているソース・コード及び 文章は特に断らない限り、すべて筆者が著作権を所有してい ます。また、これらのソース・コードは学習用のためだけに 提供しているものです。 ------------------------------------------------------- ======================================================== ◆ 01.Strutsのアプリケーション開発(プロジェクト:StrutsShop) --- Tiles --- ======================================================== では、続いて(2)〜(4)の機能を作りこんでいきましょう。これにはTilesを使って いきます。 念のため、(2)〜(4)の機能の内容を再度提示しておきます。 -------------------------------------------------------- (2) 確定した注文については、状況をリスト表示し、料金支払い状況や配達状況 をいつでも確認/変更できるようにします。 (3) 支払い済みになっていて、未配達の注文については、リスト上で「配達待ち」 の旨を表示するようにします。(「配達待ち」になっている注文を見た店員は 商品を梱包し、運送会社に引き渡す作業を行います。) (4) (商品を梱包した段階で、店員が配達の状態を「配達中」に変更すること とし)配達の状態が「配達中」になったときには、商品(ITEMテーブル)の在庫数 (QUANTITY)を自動的に該当数分減らします。 (5) 注文日から1ヶ月以上経っても支払いが済んでいないものはリスト上に「取り消し」 の表示をします。 -------------------------------------------------------- ただし、今回作成するのは(Tilesの機能を学ぶために)雛型的なアプリケーション だけにし、このアプリケーションをベースにして、次回に上記の(2)〜(4)の機能 を本格的に組み込んでいくことにします。 というわけで、今回は、 ・注文のリストを表示する。 ・リストの中から特定の注文を選択するとその詳細ページを表示する。 という程度のアプリケーションを作っておきましょう。 これで、Tilesの基本的な機能を学ぶことができます。 ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ではまず、これから作るアプリケーションのWebページは、すべて下記のような 統一されたレイアウトで作成することにしましょう。
(ここで「Webページのタイトル」というのは、Webブラウザーのタイトル・バー に表示するタイトルを意味する。) つまり、「Webページのタイトル」というタイル(tile)と(「注文管理」、 「在庫管理」、「顧客管理」、「その他」という項目から構成される)「メニュー」 のタイルと「本体」のタイルと「フッター」のタイルから構成されるWebページの レイアウトを考えます。 (ただし、「在庫管理」、「顧客管理」、「その他」という項目は、体裁を 整えるためだけであり、Tilesの使い方を説明するためのダミー(見せかけのみ) の項目とします。) そして、「Webページのタイトル」と「本体」には各Webページごとに異なる内容 が入るようにします。 具体的には、「Webページのタイトル」には、注文のリストのWebページでは 「注文のリスト」という文字列が表示され、個々の注文の詳細を表示するWebページ では「注文の詳細」という文字列が表示され、「在庫管理」、「顧客管理」、 「その他」のWebページではそれぞれ「在庫管理」、「顧客管理」、「その他」 という文字列を表示するものとします。 また、「本体」には、注文のリストのWebページでは注文のリストの表を表示 し、個々の注文の詳細を表示するWebページでは個々の注文の詳細を表示するもの とします(そのまんまですが)。 他のWebページでは「本体」には「このページはダミーです(実装されていません)。」 とだけ表示することにします。 また、「フッター」にはコピーライト(Copyright)の表示だけを行うものとします。 では、これらのタイルに名前をつけておきましょう。 それぞれ、 「Webページのタイトル」は pageTitle 「メニュー」は menu 「本体」は body 「フッター」は footer という名前にしておきます。 これらのうち、menuというタイルはtopMenu.jspというファイル名で作成すること にし、bodyというタイルは、注文のリストのWebページ用のものはorderList.jsp というファイル名で作成し、個々の注文の詳細を表示するWebページ用のものは orderDetail.jspというファイル名で作成するものとします。 他のWebページについては、ダミーのbodyをdummy.jspというファイル名で作成する ものとします。 残りのpageTitleとfooterについては、直接文字列を書き込んでおくことにします。 また、これらの全体のレイアウトはbaseLayout.jspというファイル名で作成しておく ものとします。 なお、これらのJSPファイルはこれまでに作成したJSPファイルと区別するために tiles-partsというディレクトリーを作成してそこに入れておくことにしま しょう。 ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ では、これらをtiles-defs.xml(Tilesの構成ファイル)に登録しておきましょう。 tiles-defs.xmlファイルを(Tiles XMLエディターで)開いて下さい。 (Eclipseのプロジェクト・エクスプローラー内のStrutsShop(プロジェクト)の 配下のWebContentの配下のWEB-INFの配下のtiles-defs.xmlを右クリックし、 「アプリケーションから開く」→「Tiles XMLエディタ」を選択する。) 現時点では、tiles-defs.xmlファイルの中は -------------------------------------------------------- <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd"> <!-- This is a blank Tiles definition file with a commented example. --> <tiles-definitions> <!-- sample tiles definitions <definition name=".mainLayout" path="/common/layouts/classicLayout.jsp"> <put name="title" value="Sample Page Title" /> <put name="header" value="/common/header.jsp" /> <put name="menu" value=".mainMenu" /> <put name="footer" value="/common/footer.jsp" /> <put name="body" value=".portal.body" /> </definition> <definition name=".mainMenu" path="/common/layouts/vboxLayout.jsp" > <putList name="list" > <add value=".menu.links" /> <add value=".menu.taglib.references" /> <add value=".menu.printer.friendly" /> <add value=".menu.old.documents" /> </putList> </definition> <definition name="aPage" extends=".mainLayout"> <put name="title" value="Another Title" /> <put name="body" value=".aPage.body" /> </definition> end samples --> <definition name="${YOUR_DEFINITION_HERE}"> </definition> </tiles-definitions> -------------------------------------------------------- のようになっているはずですが、これを -------------------------------------------------------- <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd"> <tiles-definitions> <!-- Base page layout used as default --> <definition name="baseLayout" path="/tiles-parts/baseLayout.jsp"> <put name="pageTitle" value="DUMMY"/> <put name="menu" value="/tiles-parts/topMenu.jsp"/> <put name="body" value="/tiles-parts/dummy.jsp"/> <put name="footer" value="Copyright (C) 2011 Future Lifestyle Inc."/> </definition> <!-- Order list page --> <definition name="tile.orderList" extends="baseLayout"> <put name="pageTitle" value="注文のリスト"/> <put name="body" value="/tiles-parts/orderList.jsp"/> </definition> <!-- Order detail page --> <definition name="tile.orderDetail" extends="baseLayout"> <put name="pageTitle" value="注文の詳細"/> <put name="body" value="/tiles-parts/orderDetail.jsp"/> </definition> <!-- Stock management page --> <definition name="tile.stockManage" extends="baseLayout"> <put name="pageTitle" value="在庫管理"/> </definition> <!-- Customer management page --> <definition name="tile.customerManage" extends="baseLayout"> <put name="pageTitle" value="顧客管理"/> </definition> <!-- Other page --> <definition name="tile.other" extends="baseLayout"> <put name="pageTitle" value="その他"/> </definition> </tiles-definitions> -------------------------------------------------------- のように書き換えて下さい。(現在「編集後はファイルを保管して下さい」という ことはいちいち書いていませんが、自主的に保管(Ctrl + S)して下さい。) (各JSPファイル名のところに赤い下線が引かれて、その左側にエラーのマーク (赤い円の中に×が入ったマーク)がつくはずですが、これはまだファイルが 実在しないからなので、あとでファイルを作成したときに解消されます。) 見ればわかる通り、上記のコードでは、基本的なWebページの定義にbaseLayout という名前をつけています。(<definition>タグのname属性によって名前をつけて います。) 一方、注文のリストのWebページの定義にはtile.orderListという名前を つけ、個々の注文の詳細のWebページの定義にはtile.orderDetailという名前を つけ、在庫管理のWebページの定義にはtile.stockManageという名前をつけ、 顧客管理のWebページの定義にはtile.customerManageという名前をつけ、 その他のWebページの定義にはtile.otherという名前をつけています。 これらは、たとえば <definition name="tile.orderDetail" extends="baseLayout"> というようなコードによって、定義(definition)タグのextendsという属性を 指定しています。 このextendsという属性は、Javaのキーワードのextendsと同じように、 このtile.orderDetailがbaseLayoutを拡張したものであることを意味して います。いわば、tile.orderDetailがbaseLayoutのサブクラスのようなイメージに なっています。 したがって、基本的にはbaseLayoutで定義されている内容が踏襲され、その上に <put name="pageTitle" value="注文の詳細"/> <put name="body" value="/tiles-parts/orderDetail.jsp"/> というコードによって、pageTitleとbodyの記述だけが上書きされます。 そして、これらのputというタグで記述されている名前が先ほどのタイルの名前である ことは言うまでもありません。 また、見ての通り、このputタグのvalue属性には"注文の詳細"のような文字列 も指定することもできれば、"/tiles-parts/orderDetail.jsp"のようなファイル名 (頭にディレクトリー名も付いている)を指定することもできます。 さて、これらの定義の名前(baseLayoutやtile.orderList、tile.orderDetailなど) は、あとでstruts-config.xmlファイルの中に指定することになりますので、覚えて いて下さい。(上記の<definition name=・・・・・>で設定した名前が struts-config.xmlの中で使えるように、struts-config.xmlの構文がTilesによって 拡張されているのです。 具体的には、これらの定義の名前は<action-mappings>における<action>のinput属性 や<forward>のpath属性に指定できます。) ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ では、続いて、先ほどのJSPファイルの作成作業に入りますが、その前に、 先ほどのtiles-partsというディレクトリーを作成しておきましょう。 (1) Eclipseのプロジェクト・エクスプローラー内のStrutsShop(プロジェクト) 配下のWebContentを右クリックし、「新規」→「フォルダー」を選択します。 (2) 「新規フォルダー」ウインドウが開いたら、「フォルダー名」欄に tiles-parts と入力し、「完了」ボタンをクリックします。 ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ では、JSPファイルを作っていきましょう。 (1) WebContentの配下にtiles-partsフォルダーができていますので、それを右クリック し、「新規」→「その他」を選択します。 (2) 「新規」ウインドウにおいて、「Amateras」配下の「Struts」配下の 「Struts JSPファイル」を選択し、「次へ」ボタンをクリックします。 (3) 「Struts JSPファイル」ウインドウにおいて、「ファイル名」欄を baseLayout.jsp に変更して、「完了」ボタンをクリックします。 これで、tiles-partsフォルダーの配下にbaseLayout.jspファイルができましたね。 同様にして、tiles-partsフォルダーの配下に topMenu.jsp orderList.jsp orderDetail.jsp dummy.jsp の各ファイルを作成しておいて下さい。 これで、tiles-defs.xmlファイルのほうを見てみると、先ほどのエラーの マークは消えているでしょう。 ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ では、続いてこれらのJSPファイルを編集していきましょう。 まず最初に、baseLayout.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" %> <%@ taglib uri="/tags/struts-tiles" prefix="tiles" %> <html:html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title><tiles:getAsString name="pageTitle"/></title> <html:base/> </head> <body bgcolor="#ffffaa"> <table width="750" border="0"> <tr> <td> <tiles:insert attribute="menu"/> </td> </tr> <tr> <td> <br> <table border="0" width="100%"> <tr valign="top"> <td width="100%"> <tiles:insert attribute="body"/> </td> </tr> </table> <br> </td> </tr> <tr> <td align="center"> <tiles:getAsString name="footer"/> </td> </tr> </table> </body> </html:html> -------------------------------------------------------- 以前のJSPファイルと違って、新しく <%@ taglib uri="/tags/struts-tiles" prefix="tiles" %> という行が追加されていることに注意して下さい。このstruts-tilesというのが Tilesのタグ・ライブラリーです。 プロジェクト・エクスプローラーのStrutsShopのWebContent配下のWEB-INF配下に struts-tiles.tldというファイルがありますね。これを指し示しているわけです。 これによってTilesのタグが使用可能になります。 また、上記の通り、Tilesのタグは tiles: で始ります。 それから、上のソース・コードの中にある <tiles:getAsString name="pageTitle"/> というTilesのタグは、その場所にtiles-defs.xmlの中で(先ほどのputタグで)指定 したpageTitleの値(value属性の値)を文字列として取り込むことを意味します。 また、 <tiles:insert attribute="menu"/> というタグは、その場所にtiles-defs.xmlの中で(先ほどのputタグで)指定した menuの値(/tiles-parts/topMenu.jsp)から取り込んだものをその場に挿入する ことを意味します。 以下、 <tiles:insert attribute="body"/> も <tiles:getAsString name="footer"/> も同様です。 続いて、topMenu.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 bgcolor="#CD5C5C" cellpadding="5" border="0" width="100%"> <tr> <td align="center">注文管理</td> <td align="center">在庫管理</td> <td align="center">顧客管理</td> <td align="center">その他</td> </tr> </table> -------------------------------------------------------- 上記のソース・コードを見ればわかる通り、今回は、文字列を表示するだけ で、まだメニューとしての機能は実装しません。 続いて、orderList.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" %> 注文番号をクリックすると、その注文の詳細ページが開き、支払いや配達の状況の設定/変更ができます。<br> <table border="1" width="100%"> <tr> <th>注文番号</th> <th>注文日</th> <th>顧客番号</th> <th>支払い方法</th> <th>支払い状況</th> <th>配達状況</th> </tr> <logic:iterate id="order" name="orderList" scope="request"> <tr> <td> <html:link action="/orderdetail" paramId="selectedOrderNumber" paramName="order" paramProperty="orderNumber" > <bean:write name="order" property="orderNumber" /> </html:link> </td> <td><bean:write name="order" property="orderDate" /></td> <td><bean:write name="order" property="userId" /></td> <td><bean:write name="order" property="payMethod" /></td> <td><bean:write name="order" property="payment" /></td> <td><bean:write name="order" property="delivery" /></td> </tr> </logic:iterate> </table> -------------------------------------------------------- 上記のソース・コードの中の <html:link action="/orderdetail" paramId="selectedOrderNumber" paramName="order" paramProperty="orderNumber" > という行に注目して下さい。この html:link というタグがリンク(link)を作るためのタグであることは、vol.193等でもお話しま したが、もっと具体的には(vol.105でも紹介したように) html:link action="/orderdetail" というように書いた場合、Webページ上でこの部分をクリックすると、URLに /orderdetail.do (後ろに.doが自動的に付加される)というのが指定されて(Strutsの)サーブレット が呼び出されることになります。すると、struts-config.xmlファイルの中の actionタグでpath="/orderdetail"と指定されているところのActionクラスが呼び出さ れることになります。 このとき、上記のように paramId="selectedOrderNumber" paramName="order" paramProperty="orderNumber" というような属性の指定があると、サーブレットのrequestオブジェクトにパラメター が渡され、そしてこれらはStrutsのActionFormオブジェクトに渡されることに なります。 ここで、paramNameという属性の値はこのページの中でアクセスされるBeanの名前で あり、paramPropertyという属性の値はそのBeanのプロパティーの名前であり、 paramIdという属性の値はサーブレットに渡されるrequestオブジェクトのパラメターの 名前になります。つまり、ここでは、orderというBeanのorderNumberという属性の値が、 selectedOrderNumberという名前のパラメターとしてサーブレットに渡されることに なります。(このorderというBeanはその上の <logic:iterate id="order" name="orderList" scope="request"> というコードによって、requestオブジェクト内のorderListという(コレクションの) Beanから取り出された(コレクションの要素の)Beanであることはわかりますね。) このselectedOrderNumberという名前のパラメターの値はStrutsのActionFormオブジェクト を通して、Actionクラスで受け取って使用することができます。 ただし、ここで渡されるデータはユーザーが画面から入力したものではないので (ユーザーが画面から入力した場合は何を入力するかわかりませんので、データ の検証をしておくべきですが、ここではユーザーが入力したものではないので データの検証をするなどの込み入ったプログラミングは必要はありませんので) わざわざActionFormクラスを新たに作成するまでもなく、(vol.195で出てきた) DynaActionFormを使えば充分です。 このDynaActionFormの部分は後ほど、struts-config.xmlファイルの中で設定し ますので、覚えておいて下さい。 続いて、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> <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="payMethod"/></td> </tr> <tr> <td>支払い状況:</td> <td><bean:write name="ORDERSET" property="payment"/></td> </tr> <tr> <td>配送状況:</td> <td><bean:write name="ORDERSET" property="delivery"/></td> </tr> </table> </center> </td> </tr> </table> </td> </tr> </table> -------------------------------------------------------- これは、特に解説する必要はありませんね。 続いて、dummy.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 align="center"> このページはダミーです(実装されていません)。 </td> </tr> </table> -------------------------------------------------------- これも、特に解説する必要はありませんね。 ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ それから、最初の(トップの)Webページを開くために、index.jspという名前 のJSPファイルも作成しておきましょう。 このJSPファイルでは、注文のリストのWebページを開くためのActionクラス を呼び出せるようにしておくことにします。 (1) WebContentの配下のtiles-partsフォルダーを右クリックし、 「新規」→「その他」を選択します。 (2) 「新規」ウインドウにおいて、「Amateras」配下の「Struts」配下の 「Struts JSPファイル」を選択し、「次へ」ボタンをクリックします。 (3) 「Struts JSPファイル」ウインドウにおいて、「ファイル名」欄を index.jsp に変更して、「完了」ボタンをクリックします。 このindex.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" %> <logic:redirect page="/ordermanage.do"/> -------------------------------------------------------- 非常に簡単な内容ですが、この <logic:redirect page="/ordermanage.do"/> というコードは、URLに /ordermanage.do というのを指定することによって、自動的に別のWebページに遷移しようとします。 (先ほどのhtml:linkタグと違って、クリックなどしないままに勝手に遷移します。) すると、Strutsのサーブレットが呼び出されて、struts-config.xmlファイル の中のactionでpath="/ordermanage"と指定されているところのActionクラスが呼び 出されることになります。 という訳で、struts-config.xmlファイルの中でpath="/ordermanage"を指定した actionタグを記述し、その遷移先(forwardタグで指定するpath属性の値)に 先ほどの注文のリストのWebページ(定義の名前はtile.orderListにしていた)を 指定すれば、このJSPから自動的に注文のリストのWebページに遷移することに なります。 ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ((原稿はここまでと同量くらいの行がまだこの後も続いていたのですが、メールを 発行しようとしたら、まぐまぐから「一回で送れる長さは50KB(51,200バイト)までです。」 と怒られてしまいましたので、今回はここでいったん切って発行します。 続きの部分はまた次回に。)) ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ (次回に続く) ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ★ホームページ: 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. 不許無断複製 |