我正在寻找一种方法,允许我(以某种方式)动态地将服务器名称,服务器端口和Web上下文传递给我的Flex客户端,以便它可以为其RemoteObjects创建一个ChannelSet来使用。当然,我的Java服务器端代码可以使用这三个属性,因此我只需要一种方法将它们传送到客户端。
默认情况下,Adobe says您应该针对服务器配置文件“services-config.xml”编译Flex应用程序。这是一种非常不灵活的做法,Spring says应该避免(我同意)。
一个popular approach是使用Flex的http服务下载XML配置文件。我喜欢这个想法,但我不想硬编码XML文件并将其保存在我的WAR文件中。有没有办法从Java代码动态生成它?
我的另一个想法是以某种方式使用flashvars将属性从包含HTML页面传递到SWF文件。但同样,我不想将它们硬编码到HTML页面中。是否有办法(可能使用Javascript?)在页面加载时动态设置这些值?
答案 0 :(得分: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和contextRoot中配置 - 作为flashVar传递。在我的情况下(通过JSP)传递为flashVar看起来像这样:
String flashVariables = "contextRoot=" + request.getContextPath() +
"&locale=" + request.getLocale().getLanguage();