本文假设读者已了解 Flex 端如何通过 远程对象(RemoteObject)、以及 BlazeDS 框架调用 Java EE 服务器的远程方法,之前研究这东西花了不少时间,走了些弯路,这里写了些总结给需要的朋友。
JavaEE应用服务器(Tomcat) + BlazeDS(AMF实现框架) + Flex SDK(ActionScript 3)
参考(官方文档):
http://livedocs.adobe.com/flex/3/html/help.html?content=data_access_4.html#201380
1、Java 对象 序列化到 Flex 客户端
客户端通过调用远程对象的方法,可以获取到远程数据,其中,一些 Java 对象将被自动转换为 AS 定义的对象,而自定义对象将按下面的方式转换:
Objects are serialized by using JavaBean introspection rules and also include public fields. Fields that are static, transient, or nonpublic, as well as bean properties that are nonpublic or static, are excluded.
Values found in public bean properties with get/set methods and public variables are sent to the client as properties on an 0bject. Private properties, constants, static properties, read-only properties, and so on are not serialized.
除已定义的类型外,标准的 JavaBean(get/set) 描述的数据成员、以及 对象的公有域 将被发送到远程 Flex 客户端(以下称序列化),成为一个对象(Object)。此外,静态域、瞬时域、非公有域,以及标准 JavaBean 的 非公有、静态域 将不会被序列化。
对于自定义类型,Flex 端得到的对象为 Object 类型,如果希望这个对象拥有强类型对象的功能(能进行逻辑处理,而不仅仅是传值),需要为与之对应的 AS 类注册一个别名,如 flash.net.registerClassAlias("zzx.javaserver.ro2.CustomObj2", Custom2),这样 Flex 端得到的 event.result 将为 Custom2 类型
如果集合容器和容器内的元素作为不同的属性一起被序列化到 Flex 端,那么对于该元素,Flex 虚拟机内只有一个实例:
public class Custom{
public List<C> list = new ArrayList<C>();
public C cObj = new C();;
public Custom(){
list.add(new C());
list.add(cObj);
}
}
Flex 端收到的对象中,cObj 和 list 中的一个元素对应同一个实例
2、Flex 客户端对象 序列化到 Java 服务端
除已定义的 AS 类型转换外,自定义 AS 对象将依据以下规定转换为 Java 对象:
- AS 中 get/set 方法描述的数据成员 以及 公有数据成员 将被序列化(For ActionScript objects, public properties defined with the get/set accessors and public variables are sent to the server.)
- AS 对象需加 [RemoteClass(alias="")] 元标签以声明映射到的服务端 Java 对象
- AS 对象和映射的 Java 对象的属性需保持一致(The Java and ActionScript property names should match.)
- 服务端对应的 JavaBean 对象必须有无参构造器
- 调用的远程对象方法时,参数表不能用来区别不同的 Java 重载方法(AS 不允许重载)
- 要序列化的 AS 对象需要将类型导入到运行环境,如使用 import,也可以使用强类型定义来保证(The ActionScript class to which data is converted must be used or referenced in the MXML file for it to be linked into the SWF file and available at run time. The class itself should use strongly typed references so that its dependencies are also linked.)
- 元标签 [Transient] 可以保证属性不被序列化
从 Flex 端传递到 Java 端的 String 对象保持单例特性
假如 Flex 端某个实例有多个不同的引用,那么序列化到 Java 端时,这多个引用将指向同一个实例
分享到:
相关推荐
flex与java通过BlazeDs进行交互
Flex技术本身和Java就有很强的关联性,它提供了一个基于Eclipse的IDE和BlazeDS.BlazeDS是个基于服务端的Java远程调用和Web消息的一个开源的技术。有许多应用都是以Java为后端处理的。Flex用于前端。由于Java和Flex...
BlazeDS创建flex与后台代码交互
JAVA通过BlazeDS与FLEX通信 BlazeDS.zip java项目,使用MYECLIPSE导入 FlexJavaServer.fxp FLEX项目,使用FLASHBUILDER4.5导入
想要FLex与Java实现交互,blazeds是一个很好的开源小插件
最简单的BlazeDS实现flex与java通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的BlazeDS实现flex与java通信..无积分下载...最简单的...
使用BlazeDS实现flex与java 整合 使用BlazeDS实现flex与java 整合 flex+java
这是订阅消息的flex端实现,要与我的资源中的blazeds一块应用。 代码肯定没有问题。 另外,客户端订阅的时候,可能会等时间长一些,可能有一分钟,请不要着急。
blazeDS框架实现Flex与J2EE的通信 通过blazeDS框架架构一个简单的FLEX项目于J2EE后台通信实例
flex+java+blazeds配置最终版
工作录制,语言为成都方言 主要实际操作Flex远程对象实现
用Flex、Eclipse和blazeds_turnkey实现Flex与Java的交互的相关配置和简单示例
Flex使用blazeds和java交互数据。 blazeds包和使用的详细步骤。 Flex blazeds 使用步骤、blazeds_bin_3-0-0-544.zip、blazeds.war、
Spring MVC+BlazeDS+Flex框架实践
BlazeDS配置指南 tomcat安装 xml配置 flex与blazeDs
flex使用BlazeDS远程调用java例子.
FLEX,BlazeDS,JAVA实现服务器端数据推送技术,下载后直接导到你的MYECLIPSE即可运行。先在IE内输入:http://localhost:8080/pushDemo/flex/pushDemo.html,点击“button”后,再另一个IE窗口内输入:...
Flex Blazeds入门教程 写的很不错的教程
一个java web项目模块,一个flex项目模块,web项目发布到tomcat,flex通过BlazeDS远程服务来调用java服务提供的方法,实现了flex前端与java后台服务的数据交互。
flex 工具 blazeds