什么是RemoteObject?
顾名思义,即远程对象。这里指的就是在Flex中获取Java对象。有什么用呢?这样Flex可以更加简 单的获取服务端的数据,比如你在Java中有个方法进行了数据查询,那么你可以很容易通过Flex里的RemoteObject访问到该类,并调用该方 法,最后返回的数据是Flex也兼容的Array对象。
好了,下面开始进行工作....o(∩_∩)o...
1.新建Java类
Source folder : 指定源路径(本例为FlexRemoteObject/src).
Package : 指定包名.
Name : 指定类名.
2.编写RemoteClass内容.
这是一个简单的Class,里面只有一个public方法 sayHello ,带有一个String参数,并且返回一个String.
3.配置BlazeDS的 remoting-config.xml
1).它是RemoteObject和相关远程访问的配置文件.路径位于
2).改写其代码,如下:
<?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指定一个RO对象,id将在Flex中进行RO请求时调用. -->
<destinationid="RemoteClassRO">
<properties>
<!-- source指定调用类的全路径 -->
<source>com.test.RemoteClass</source>
<!-- scope指定作用域 -->
<scope>application</scope>
</properties>
</destination>
</service>
注意:在修改了配置文件后可能需要重启web服务器(Tomcat)
4. 编写mxml文件,进行RO请求.
1).打开FlexRemoteObject.mxml文件,编写内容如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init();">
<mx:Style>
Label{
fontSize:14;
fontFamily:"微软雅黑";
}
TextInput{
fontSize:14;
fontFamily:"微软雅黑"; height:25; width:149; paddingBottom:-4; paddingLeft:4; paddingTop:-2;
}
Button{
fontSize:"12"
}
</mx:Style>
<mx:Script>
<![CDATA[
import mx.rpc.events.ResultEvent;
import mx.controls.Alert;
private var alertCss:CSSStyleDeclaration;
private function init():void{
alertCss = StyleManager.getStyleDeclaration("Alert");
alertCss.setStyle("modalTransparencyColor","haloBlue");
alertCss.setStyle("themeColor","haloBlue");
alertCss.setStyle("fontSize","14");
alertCss.setStyle("fontFamily","微软雅黑");
}
private function callRO():void{
var name:String = txt.text;
if(name==""){
Alert.show("请输入姓名!","提示信息");
}else{
firstRO.sayHello(name);
firstRO.addEventListener(ResultEvent.RESULT,getROResult);
}
}
private function getROResult(e:ResultEvent):void{
Alert.show(e.result.toString(),"远程对象访问");
}
]]>
</mx:Script>
<mx:RemoteObject id="firstRO" destination="RemoteClassRO" />
<mx:Label id="lbl" text="请输入姓名:" x="29" y="49" />
<mx:Button id="btn" click="callRO()" label="RO请求" x="307" y="50" />
<mx:TextInput x="124" y="49" id="txt" text="爷们" />
</mx:Application>
其中:1.<mx:Style></mx:Style>为样式区域,里面为页面的组件设定了样式;
2.<mx:Script></mx:Script>为脚本区域,里面是将调用到的函数;
3.剩下为页面各个组件.
init()函数:主要是为Alert设定相关样式,不作为重点介绍.
callRO()函数:作为请求函数,与页面的Button组件的click事件进行了关联,即当点击Button时,会调用这个callRO()函数.
函数内部对文本框输入内容进行了判断,当输入内容为空时,弹出相关提示;
反之,进入远程对象的方法调用,firstRO.sayHello(name)——其中name为文本框内容,
另外还为firstRO对象添加了一个事件的监听,firstRO.addEventListener(ResultEvent.RESULT,getROResult);
这是告诉firstRO对象,当触发了远程对象的方法调用后,指定哪个函数为回调函数.
getROResult()函数,是一个回调函数,将远程对象方法返回值用消息框的形式显示出来.
上面提到的回调函数,如果对AJAX稍有了解的话,就容易理解了,如果你还不太了解,那么找些资料看看吧,o(∩_∩)o...
5.运行查看,效果如图:
呵呵,感觉还是挺有意思的~~
这个RemoteObject的使用,跟DWR的感觉很相似,有些共通的东西,但是我不会说~~o(∩_∩)o...哈哈