Flex RemoteObject使用介绍

Flex 支持多种与服务器端的通讯方式,包括 remote 和 socket 等高级数据通讯方式。 remote 采用 amf ( action message format )协议。 amt 是一种二进制格式,专用于 as 和服务器端通讯,比 http 通讯要快很多,而且支持多种数据类型,如 java , .net,php 等。本文将介绍如何使用 Flex RemoteObject components 调用服务器端 java 对象的方法。

Flex 客户端使用 RemoteObject

在 mxml 中声明一个 id 为 ro 的 RemoteObject ,在 as 中可以通过 ro 引用 RemoteObject 对象, destination 是服务器端暴露的 java 服务对象, Method 的 name 是 java 服务对象中的方法, result 是访问服务器方法的回调函数。本例中是使用 RemoteObject 访问服务器端 HelloWorld 的 sayHello 方法。

testHelloWorld.mxml 代码

<?xml version=”1.0″ encoding=”utf-8″?>

<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml”>

   <mx:Script>

     <![CDATA[

       import mx.controls.Alert;

import mx.rpc.events.ResultEvent;

[Bindable]  

private var memberResult:Object;

     

private function say():void{

var user:User=new User();

user.setName(n.text);

user.setId(”testId”);

ro.sayHello(user);

}
public function handleResult(event:ResultEvent):void {

            target.text=event.result as String;

}

]]>

</mx:Script>

<mx:RemoteObject id=”ro” destination=”HelloWorld”>

<mx:method name=” sayHello ” result=” handleResult (event)”/>

<mx:RemoteObject>

<mx:TextInput id=”n” change=”say()”/>  

<mx:Label id=”target”/>

</mx:Application>

User.as 代码

package {

[RemoteClass(alias="cn.com. remote.test.User")]
public class User {  

public var name:String;

public var id:String;

public function getName():String{

return name;

}

public function setName(name:String ):void {

this.name = name;

}

public function getId():String {

return id;

}

public function setId(id:String):void {

this.id = id;

}

}

}

定义服务器端 java 对象

HelloWorld.java 代码

package cn.com. remote.test;

public class HelloWorld {

public String sayHello(String name){

System.out.println(”**********sayHello(String name) in*************”);

System.out.println(”hello,”+name);

return “hello,”+name;

}

public User getUser(String name){

System.out.println(”**********getUser in*************”);

return new User(name,name+”Id”);

}

}

User.java 代码

package cn.com. remote.test;

public class User {

private String name;

private String id;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

}

配置服务器端 destination

使用 RemoteObject 与服务器端通讯,需要用到 Flex Date Services ,本文使用的是 BlazeDS server , BlazeDS 的使用本文不做详细说明,可参看 http://opensource.adobe.com/wiki/display/blazeds/BlazeDS/

在 remoting-config.xml 中配置 destination ,增加如下代码

    < destination id = “ helloWorld “ >

       < properties >

           < source > cn.com. remote.test .helloWorld </ source >

           < factory > springFactory </ factory >

       </ properties >

    </ destination >

As 对象与 java 对象的转换

在 as 中调用 ro.sayHello 时,传入一个 as 对象 user ,服务器端将会把 user 对象转换为 java 对象 user 。同样,如果服务器端方法 return 的是 java User 对象, as 接收到的将是 as 的 User 对象。 [RemoteClass(alias="cn.com. remote.test.User")] 声明了 As user 对象与 java User 对象的对应关系。下面是基础类型或常用类的对应关系图。

需要注意到问题

flex remote 传递 object 参数和接受返回的 dojo 对象,应注意以下问题:

1.as 对象属性必须为 public 的

2.remote 调用的 java 方法时,参数不能作为区别不同方法的依据,也就是说, java 方法不

能重名

3.dojo 对象,必须有无参构造函数

4.as 对象需加 [RemoteClass(alias="cn.com. remote.test.User")]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值