2010-12-10 37 views
2

我正在尋找一種方法,允許我(以某種方式)動態地將服務器名稱,服務器端口和Web上下文傳遞給我的Flex客戶端,以便它可以創建ChannelSet它是使用的RemoteObjects。當然,這三個屬性對我的Java服務器端代碼來說很容易獲得,所以我只需要一種方法將它們傳送給客戶端。外部化Flex/Java Web應用程序的客戶端ChannelSet配置

默認情況下,Adobe says您應該根據服務器配置文件「services-config.xml」編譯您的Flex應用程序。這是一個非常不靈活的做法,應該避免Spring says(我同意)。

一個popular approach是使用Flex的http服務下載XML配置文件。我喜歡這個想法,但我不想對XML文件進行硬編碼並將其保存在我的WAR文件中。有沒有辦法從Java代碼動態生成這個?

我的另一個想法是以某種方式使用flashvars將屬性從包含的HTML頁面傳遞到SWF文件。但是,我不想將它們硬編碼到HTML頁面中。有沒有辦法(也許用Javascript?)在頁面加載時動態設置這些值?

回答

3

這就是我的做法。我希望你會發現它有用:

public static function getRemoteObject(destination:String, channelName:String, 
    showBusyCursor:Boolean=true):RemoteObject{ 
    var remoteService:RemoteObject=new RemoteObject(destination); 
    var channelSet:ChannelSet=new ChannelSet(); 
    var url:String = Application(Application.application).url; 
    var secure:Boolean = URLUtil.isHttpsURL(url); 
    var protocol:String = URLUtil.getProtocol(url); 
    var amf:AMFChannel; 
    if (secure){ 
     amf = new SecureAMFChannel(channelName, protocol + 
      "://{server.name}:{server.port}" + 
      (Application.application as Application).parameters.contextRoot + 
      "/graniteamf/amf"); 
    }else{ 
     amf = new AMFChannel(channelName, protocol + 
      "://{server.name}:{server.port}" + 
      (Application.application as Application).parameters.contextRoot 
      + "/graniteamf/amf"); 
    } 
    channelSet.addChannel(amf); 
    remoteService.channelSet=channelSet; 
    remoteService.showBusyCursor=showBusyCursor; 
    return remoteService; 
} 

所以你可以看到你需要提供的唯一的東西是目標 - 必須在服務器端的XML和上下文根配置 - 爲Flash變量傳遞。在我的情況下(通過JSP)傳遞flashVar看起來像這樣:

String flashVariables = "contextRoot=" + request.getContextPath() + 
    "&locale=" + request.getLocale().getLanguage(); 
+0

這太棒了。我得到你如何從Application.url推斷主機名,端口和協議。不過,我是一個JSP新手......你能幫我解決另一個問題嗎?你是說你把你的SWF html包裝器轉換成JSP頁面嗎?或者你把javascript放在調用JSP頁面的html包裝器中?這是如何運作的? – HDave 2010-12-10 14:20:24

相關問題