URLを使ってFlex2にパラメータを渡す

Flex2単体よりもAjaxとか動的に生成されるHTMLとの連携が大事だと思ってみたので、調べたら簡単にできました。


URL使ってFlex2にパラメータを渡します。


以下サンプル。urlparam.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.macromedia.com/2005/mxml" creationComplete="initVars()">
    <mx:Script><![CDATA[
        // Declare bindable properties in Application scope.
        [Bindable]
        public var myName:String;
        [Bindable]
        public var myHometown:String;
        
        // Assign values to new properties.
        private function initVars():void {
            myName = Application.application.parameters.myName;
            myHometown = Application.application.parameters.myHometown;
        }
    ]]></mx:Script>
    
    <mx:VBox>
    <mx:HBox>
        <mx:Label text="URLに日本語入れてみた: "/>
        <mx:Label text="{myName}" fontWeight="bold"/>
    </mx:HBox>
    <mx:HBox>
        <mx:Label text="URLエンコードされた日本語いれてみた: "/>
        <mx:Label text="{myHometown}" fontWeight="bold"/>
    </mx:HBox>
    </mx:VBox>
</mx:Application>

解説します。

URLから受け取る名前を指定します。Flex外部から入力されるパラメータの場合、[Bindable]と付くようです。DataGridは外部から入力されたオブジェクトを参照しているので[Bindable]と付きます。URLで指定するときには、名前=値 の形式で渡しましょう。

        [Bindable]
        public var myName:String;

ApplicationタグはFlexのロード後に最初に実行する処理を指定します。今回はinitVars()メソッドを指定しています。

<mx:Application xmlns:mx="http://www.macromedia.com/2005/mxml" creationComplete="initVars()">

Application.applicationはトップレベルでロードされたFlexを指しています。このサンプルであればurlparam.mxmlとなります。Application.application.parametersは、urlparam.mxmlのフィールド群を指していて、Application.application.parameters.myNameは、urlparam.mxml内で定義されているフィールドmyNameを指しています。

myName = Application.application.parameters.myName;

{myName}はフィールドmyNameの参照値を指しています。

<mx:Label text="{myName}" fontWeight="bold"/>

というわけで、実行するにはFlexBuilder2でコンパイルしたurlparam.swfをWEBサーバーにおいて、以下のように指定をするとパラメータが渡っていることが分かります。IEから日本語文字列とURLエンコードされた文字列をやってみましたが、正しく表示されました。

http://webserver/urlparam.swf?myName=はろー&myHometown=%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%82%8F

・参考資料

Applicationタグ
http://livedocs.macromedia.com/labs/1/flex/langref/mx/core/Application.html


Passing request data into Flex applications
http://livedocs.macromedia.com/flex/20beta1/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001296.html