`
NewTamato
  • 浏览: 101325 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

如何使用Flex RemoteObject components

阅读更多

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")]

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics