我有我的HTTPService,它看起来像这样:
<s:HTTPService
id="setCustomerInstalledPackageService"
url="http://localhost:8090/myapp/servletName"
useProxy="false" method="POST"
resultFormat="text"
result="onResult(event)"
fault="fault(event)">
</s:HTTPService>
我想通过从属性文件中读取HOST和PORT来使这段代码更加通用。这样,如果我更改了我的Web服务的主机(或端口),我将不必重新编译我的闪存源。
我已经搜索了一下网页,但找不到答案......有人吗?
谢谢!
答案 0 :(得分:4)
不确定这是否是最优雅的解决方案;如果有人知道更好的方式,我会乐于学习。
主要思想是使用一些可以在之后替换的唯一字符串声明HTTPService
。就我而言,我使用了 __ 主机 __ 和 __ 端口 __ 。读完配置文件后,我用我从文件中获取的值替换这些字符串。
Main.mxml:
private function initApp():void
{
var ldr:URLLoader = new URLLoader();
ldr.addEventListener(Event.COMPLETE, onLoadPropsFile);
ldr.load(new URLRequest("service-config.txt"));
}
private function onLoadPropsFile(e:Event):void
{
var host:String;
var port:String;
var loadedText:String = URLLoader(e.target).data;
var array:Array = loadedText.split('\r\n');
for each(var entry:String in array)
{
var keyValuePair:Array = entry.split('=');
var key:String = keyValuePair[0];
var val:String = keyValuePair[1];
if(key == 'host')
{
host = val;
}
if(key == 'port')
{
port = val;
}
}
var value:Number = Number(loadedText);
resolveServiceUrl(myService, host, port);
}
private function resolveServiceUrl(service:HTTPService, host:String, port:String):void
{
service.url = service.url.replace('__host__', host);
service.url = service.url.replace('__port__', port);
}
调用initApp()
<s:Application xmlns:...
...
initialize="initApp();" >
服务以这种方式声明:
<s:HTTPService
id="myService"
url="http://__host__:__port__/appName/..."
useProxy="false" method="POST" resultFormat="text"
result="onResult(event)"
fault="fault(event)">
<mx:request xmlns="">
<method>search</method>
<input>{input.text}</input>
</mx:request>
</s:HTTPService>
并且service-config.txt非常简单:
host=localhost
port=8090
希望有一天能帮助别人......