我正在寻找一种方法,允许我(以某种方式)动态地将服务器名称、服务器端口和 Web 上下文传递到我的 Flex 客户端,以便它可以创建一个 ChannelSet 供其 RemoteObjects 使用。当然,我的 Java 服务器端代码可以轻松使用这三个属性,因此我只需要一种将它们传递给客户端的方法。
默认情况下,Adobe says您应该根据服务器配置文件“services-config.xml”编译 Flex 应用程序。这是一种非常不灵活的做法,Spring says应该避免(我同意)。
一个popular approach就是利用Flex的http服务下载一个XML配置文件。我喜欢这个想法,但我不想硬编码 XML 文件并将其保存在我的 WAR 文件中。有没有办法从 Java 代码动态生成它?
我的另一个想法是以某种方式使用 flashvars 将属性从包含的 HTML 页面传递到 SWF 文件。但同样,我不想将它们硬编码到 HTML 页面中。有没有办法(也许用Javascript?)在页面加载时动态设置这些值?
最佳答案
我就是这样做的。我希望您会发现它有用:
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();
关于java - Flex/Java Web 应用程序的外部化客户端 ChannelSet 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4405226/