`
wangleifire
  • 浏览: 500039 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

如何使用Flex RemoteObject components 与JAVA交互

    博客分类:
  • FLEX
阅读更多


2008-12-25  |  22:53分类:前端开发   |作者: 奎跃翔 |   <!-- 奎跃翔-->2,012 views

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

分享到:
评论
2 楼 hengltyy 2010-08-17  
徐晶鑫 写道
如果java pojo

public class Student

{

private int sid;

private String sname;

private Classes classs //一个对象

   AS文件怎么写 主要是Classes那里怎么写  对象怎么映射呢

请指教 谢谢


Class也是一样的,如果是单数对象就用Class名,如果是集合的话,就用ArrayCollection; as 对象文件的里面,不用写属性的get set方法,只需要将属性设为public,如果你想要修改as对象文件的属性取值方式,可以设置为private,然后用一个public set name() : String{}方法来返回name属性;

package{
   [RemoteClass(alias="com.xxx.xxx.Student")]
    public lass Student
    {

         public var sid : Number;

         private var _sname : String;

         public var classs : Classes;
    
         public set Name(name : String) : void
         {
              _sname = name;
         }
         public get Name () : String
         {
              return _sname;
         }
     } 
}
1 楼 徐晶鑫 2010-01-21  
如果java pojo

public class Student

{

private int sid;

private String sname;

private Classes classs //一个对象

   AS文件怎么写 主要是Classes那里怎么写  对象怎么映射呢

请指教 谢谢

相关推荐

Global site tag (gtag.js) - Google Analytics