Flex

HTTPとHTTPSの動的切り替えと、ユーザーディレクトリへの展開への対応


FlexのRemoteObjectのendpointプロパティの動的切り替えのサンプルです。
ActionScriptだとポート番号が0になったり挙動不審だったので、JavaScriptで実装しなおしました。
ExternalInterface.call() で呼んでるだけです。


[ index.template.html ]
------------------
<script language="JavaScript" type="text/javascript">
<!--
// -----------------------------------------------------------------------------
// Globals
// Major version of Flash required
var requiredMajorVersion = ${version_major};
// Minor version of Flash required
var requiredMinorVersion = ${version_minor};
// Minor version of Flash required
var requiredRevision = ${version_revision};
// -----------------------------------------------------------------------------

// MyScript
function getFQDN(){
    var fqdn = "";
    var hostname = location.hostname;
    var protocol = location.protocol;
    var port = location.port;
    var href= location.href;
   
    var a;
    var b;
   
    var lastIndex = href.lastIndexOf("/");
    href = href.substring(0, lastIndex);
   
    // URLから ~ が 見つからなかったら
    if(href.indexOf("~") == -1){
        if(port == ""){
            fqdn = protocol + "//" + hostname + "/"
        }else{
            fqdn = protocol + "//" + hostname + ":" + port + "/"
        }
    }else{
        a = href.split("//")[1];
        b = a.split("/")[1];
        if(port == ""){
            fqdn = protocol + "//" + hostname + "/" + b;
        }else{
            fqdn = protocol + "//" + hostname + ":" + port + "/" + b;
        }
    }
    return fqdn;
}
// -->
</script>
...省略...
------------------


[ EndPoint.as ]
------------------
package com.chocbanana.flex.controller {

    import mx.core.Application;
    import mx.utils.URLUtil;
    
    public class EndPoint {
        public function EndPoint() {
            //TODO: implement function
        }
        public static function getEndPointRevers():String{
            var endPointURL:String = ExternalInterface.call("getFQDN");
            //Alert.show(endPointURL);
            endPointURL = endPointURL + "/messagebroker/amf";
            return endPointURL;
        }
    }
}
[ EOF ]
------------------

一旦ダミーのLabelへURLを貼り付けて、<mx:RemoteObject id="login" endpoint="{lbl_endPoint.text}" /> とすればおk。

[ Splash.mxml ]
------------------
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" verticalAlign="middle" horizontalAlign="center" creationComplete="onCreate();" showCloseButton="false" title="Login" horizontalScrollPolicy="off" width="960" height="520" activate="onActive();">
    <mx:Script>
        <![CDATA[
            import mx.managers.PopUpManager;
            import com.chocbanana.flex.controller.EndPoint;

            public function setEndPoint():void{
                lbl_endPoint.text = com.chocbanana.flex.controller.EndPoint.getEndPointRevers();
            }

        ]]>
    </mx:Script>
<mx:RemoteObject id="login" endpoint="{lbl_endPoint.text}" destination="flexService" showBusyCursor="true">
    <mx:method name="login" result="isLoginResult(event)"/>
</mx:RemoteObject>

<mx:Label id="lbl_endPoint" creationComplete="setEndPoint();" width="5" height="5" visible="false"/>
</mx:TitleWindow>
[ EOF ]
------------------

いちいちダミーのコンポーネントを貼らないとダメな点がなければなぁ...

このページの先頭へ