Flex を使った WEBアプリの基本(2) :【WEB Flex】


ブラウザでダウンロード
http によるデータ送信
Flex を使うとたいてい見栄えが同じなので、
HTML上の css と同じ感覚で最低限の変更のサンプルです

コード上は、JavaScript 側から送信できるインターフェイスを追加していますので、
F12 で firebug lite を表示させて、最下行のコマンドラインから
:dir(id_sample)
で、関数の存在を確認できます。
実行は以下のようにして行います。

id_sample.sendSyain("文字列")

---------------------------------------------------------------------------------
Firefox の Firebug では、document.getElementById("id_sample").sendSyain("文字列")
として下さい。
001.<?xml version="1.0" encoding="utf-8"?>
002.<mx:Application
003.    xmlns:mx="http://www.adobe.com/2006/mxml"
004.    initialize="initData();"
005.>
006. 
007.<mx:Style>
008. 
009.    global {
010.        fontSize: 14;
011.        color: #FFFFFF;
012.    }
013. 
014.    /*
015.        ● backgroundGradientColors
016.            背景グラデーションの塗りの着色で使用するカラーを指定します。
017.            これは、RGB カラーを指定する 2 つの uint 値から成る配列に
018.            設定する必要があります。
019.            エレメント 0 および 1 は、カラーグラデーション
020.            の開始値と終了値を指定します。
021.            単色の背景の場合は、エレメント 0 と 1 に同じカラー値を設定します。
022.            値 undefined は、backgroundColor プロパティに基づいて
023.            背景グラデーションが生成されることを示します。
024.            デフォルト値undefined.
025.    */
026.    Application {
027.        backgroundGradientColors: 0,9044009
028.    }
029. 
030.    FormHeading {
031.        fontSize: 18;
032.    }
033. 
034.    TextInput {
035.        color: #000000;
036.    }
037. 
038.    .labelAlign {
039.        textAlign: left;
040.    }
041. 
042.    /*
043.        ● fillColors
044.            コントロールの背景の着色に使用されるカラーです。
045.            フラットな外観のコントロールを作成するには、
046.            どちらの値にも同じカラーを渡します。
047.            デフォルト値[ 0xFFFFFF, 0xCCCCCC ]
048.        ● fillAlphas
049.            [1, 1] を使うと、コントロールの背景が不透明
050.            になります。
051.            デフォルト値[ 0.6, 0.4 ]
052.    */
053.    .sendButton {
054.        fillColors: #000000,#000000;
055.        fillAlphas: 1,1;
056.        color: #FFFFFF;
057.        textRollOverColor: #FFFFFF;
058.    }
059. 
060.</mx:Style>
061.<mx:Script>
062.<![CDATA[
063. 
064.    import mx.controls.*;
065.    import mx.events.*;
066.    import mx.rpc.events.*;
067.    import mx.formatters.*;
068.    import flash.external.*;
069. 
070.    // *********************************************************
071.    // アプリケーションの初期化
072.    // *********************************************************
073.    public function initData():void {
074. 
075.        firebug("処理開始");
076.        fld1.setFocus();
077. 
078.        // JavaScript に公開するメソッドの登録
079.        ExternalInterface.addCallback("sendSyain", sendSyain);
080.        // いかなるドメインからも OK
081.        Security.allowDomain("*");
082.    }
083. 
084.    // *********************************************************
085.    // JavaScript 用のインターフェイス
086.    // *********************************************************
087.    public function sendSyain(log:String="送信"):void {
088. 
089.            sendData();
090.            firebug(log);
091. 
092.    }
093. 
094.    // *********************************************************
095.    // ログ表示
096.    // *********************************************************
097.    public function firebug(data:Object):void {
098.     
099.        var fmt:DateFormatter = new DateFormatter();
100.     
101.        fmt.formatString = "YYYY/MM/DD HH:NN:SS";
102.        var logdt:String = fmt.format( new Date );
103.     
104.        ExternalInterface.call(
105.            "console.log", logdt,
106.            data+""
107.        );
108.     
109.    }
110. 
111.    // *****************************************************
112.    // HTTPServiceを使用してHTTPリクエスト(GET)を行う
113.    // *****************************************************
114.    private function sendData():void {
115.        // ● リクエストするURLをセット
116.        // ★ http:// で記述すると、ベースが ローカルでも動作します
117.        srv.url = "http://localhost/php/ph/flex3_http_sample2/response.php";
118. 
119.        srv.request.fld1 = fld1.text;
120.        srv.request.fld2 = fld2.text;
121.        srv.request.fld3 = fld3.text;
122. 
123.        // レスポンス結果のデータフォーマット
124.        srv.resultFormat = "text";
125.        srv.method = "GET";
126.        srv.send();
127. 
128.    }
129.     
130. 
131.    // *****************************************************
132.    // HTTPServiceが成功
133.    // *****************************************************
134.    private function resultHandler(e:ResultEvent):void {
135. 
136.        Alert.show(e.result.toString());
137. 
138.    }
139. 
140.    // *****************************************************
141.    // HTTPServiceでエラーが発生した
142.    // *****************************************************
143.    private function faultHandler(e:FaultEvent):void {
144.        Alert.show(e.fault.message);
145.    }
146. 
147.]]>
148.</mx:Script>
149. 
150.<mx:HTTPService
151.    id="srv"
152.    showBusyCursor="true"
153.    result="resultHandler(event)"
154.    fault="faultHandler(event)"
155./>
156. 
157.<mx:Form width="90%" height="90%">
158.    <mx:FormHeading height="40" label="社員データ登録"/>
159.     
160.    <mx:FormItem
161.        label="社員コード"
162.        labelStyleName="labelAlign"
163.        paddingBottom="30"
164.    >
165.        <mx:TextInput
166.            id="fld1"
167.            maxChars="4"
168.            width="50"
169.        />
170. 
171.    </mx:FormItem>
172.    <mx:FormItem
173.        label="氏名"
174.        labelStyleName="labelAlign"
175.         paddingBottom="30"
176.    >
177.        <mx:TextInput
178.            id="fld2"
179.            width="300"
180.        />
181. 
182.    </mx:FormItem>
183.    <mx:FormItem
184.        label="フリガナ"
185.        labelStyleName="labelAlign"
186.         paddingBottom="30"
187.    >
188.        <mx:TextInput
189.            id="fld3"
190.            width="300"
191.        />
192. 
193.    </mx:FormItem>
194. 
195.    <mx:FormItem
196.        label=""
197.        labelStyleName="labelAlign"
198.         paddingBottom="30"
199.    >
200.        <mx:Button
201.            id="btn"
202.            label="送信"
203.            click="sendData()"
204.            styleName="sendButton"
205.        />
206.    </mx:FormItem>
207. 
208. 
209.</mx:Form>
210. 
211.</mx:Application>
PHP 側のコード
file_put_contents で、Windows 用に1行1データでフォーマットされたテキストを
入力された社員コード.txt というファイルに書き込みます
01.<?
02.header( "Content-Type: text/html; Charset=utf-8" );
03.header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
04. 
05.mb_language( "ja" );
06.mb_internal_encoding("UTF-8");
07. 
08.// Windows 用として CRLF
09.$text .= $_GET['fld1']."\r\n";
10.$text .= $_GET['fld2']."\r\n";
11.$text .= $_GET['fld3']."\r\n";
12. 
13.$utf8 = $text;
14. 
15.// 書き込みは Windows 用として SHIFT_JIS
16.$text = mb_convert_encoding( $text, "SHIFT_JIS", "UTF-8" );
17. 
18.file_put_contents( $_GET['fld1'].".txt", $text );
19. 
20.// Flex は utf-8 なので、変換前を返す
21.print_r($utf8);
22.?>