下面通过创建一个通过调用服务端Java类的Flex应用说明Remoting服务的使用。
(1)打开14.2节当中创建的LCDSFlexStu项目。点击【File】|【New】|【other】菜单项。弹出【New】对话框,如图所示。选择【Java】|【Class】选项。单击【Next】按钮,进入【New Java Class】对话框。
(2)在【New Java Class】对话框中的【Package】文本框中填入“com.lcdsstu”,在【Name】文本框中填入“Hello”。其他设置使用缺省值,如图所示。单击【Finish】按钮,完成创建。
(3)打开com.lcdsstu包下创建出的Hello.Java文件修改代码如下所示。
package com.lcdsstu;
public class Hello {
//定义一个方法返回字符串,等待远程调用。
public String HelloLCDSRemoting(String name){
return "Hello"+name+"LCDS";
}
}
(4)打开remoting-config.xml文件,修改代码如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service"
class="flex.messaging.services.RemotingService">
<adapters>
<adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>
</adapters>
<default-channels>
<channel ref="my-amf"/>
</default-channels>
<destination id="HelloRemoting">
<properties>
<source> com.lcdsstu.Hello</source>
</properties>
</destination>
</service>
(5)在LCDSFlexStu项目当中新建一个【MXML Application】命名为LCDSHello。打开LCDSFlexStu.mxml文件修改代码如下所示。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
//引如需要的类库
import mx.rpc.events.FaultEvent;
import mx.rpc.remoting.RemoteObject;
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
//声明一个RemoteObject
private var HelloJava:RemoteObject=new RemoteObject("HelloRemoting");
private function JavaHello():void{
//添加调用成功和调用失败的监听
Hellojava.addEventListener(FaultEvent.FAULT,HelloJavaFault);
Hellojava.addEventListener(ResultEvent.RESULT,HelloJavaResult);
Hellojava.HelloLCDSRemoting(name_txt.text);
}
//声明调用失败的监听函数
private function HelloJavaFault(event:FaultEvent):void{
//显示错误信息
Alert.show(event.message.toString(),"调用失败");
}
//声明调用成功的监听函数
private function HelloJavaResult(event:ResultEvent):void{
//显示返回结果
Alert.show(String(event.result),"调用成功");
}
]]>
</mx:Script>
<mx:Style>
global{
fontSize:12pt;
}
</mx:Style>
<mx:Button label="调用Java类" horizontalCenter="0" verticalCenter="22" click="JavaHello()"/>
<mx:TextInput id="name_txt" horizontalCenter="0" verticalCenter="-23" />
</mx:Application>
在上面的代码中声明RemoteObject类实例的同时指明了在remoting-config.xml文件当中声明的Java类的别名。这样就可以直接调用远程的Java类。Hellojava.HelloLCDSRemoting(name_txt.text);代码中直接调用Java类Hello的方法HelloLCDSRemoting。
(6)运行LCDSHello.mxml,效果如图所示。在文本框中输入文本,单击【调用Java类】按钮,弹出返回结果对话框,效果如图所示。
通过上面的例子可以看出,Flex通过LCDS可以直接调用服务端的Java类,这样就可以实现用户交互层和业务逻辑层的无缝连接,略去了通过HTTP进行文本转换的步骤,数据类型也可以自动转换。