使用lcds时,由于直接可以和java打交道,可以不用通过xml或者其他方式通信,用起来真的很方便,听说效率非常好,虽然不知道怎么来测试这效率,但还是很乐意去用它。数据从前台传到后台,后台处理后又将新数据传到前台,有人说web编程便是处理字符串,并不是没有道理的。
最先遇到的问题便是actionscript与java数据类型转换,比如在actionScript中定义一个int型的变量,传到后台时会自动对应为一个java的int型变量。但数据类型那么多,还真要好好列一列,当然不是自己去一个一个试,官方的文档里早就写好了。一个是actionScript 到java,一个是java到actionScipt,两张表:
从actionScript到java:
**************************************************************************
ActionScript type (AMF 3)
Deserialization to Java
Supported Java type binding
Array (dense)
|
java.util.List
|
java.util.Collection, Object
[ ] (native array)
If the type is an interface, it is mapped to the following interface implementations
- List becomes ArrayList
- SortedSet becomes TreeSet
- Set becomes HashSet
- Collection becomes ArrayList
A new instance of a custom Collection implementation is bound to that type.
|
Array (sparse)
|
java.util.Map
|
java.util.Map
|
Boolean
String of "true"
or "false"
|
java.lang.Boolean
|
Boolean, boolean, String
|
flash.utils.ByteArray
|
byte []
|
|
flash.utils.IExternalizable
|
java.io.Externalizable
|
|
Date
|
java.util.Date
(formatted for Coordinated Universal Time (UTC))
|
java.util.Date, java.util.Calendar, java.sql.Timestamp, java.sql.Time, java.sql.Date
|
int/uint
|
java.lang.Integer
|
java.lang.Double,
java.lang.Long, java.lang.Float, java.lang.Integer, java.lang.Short,
java.lang.Byte, java.math.BigDecimal, java.math.BigInteger, String,
primitive types of double, long, float, int, short, byte
|
null
|
null
|
primitives
|
Number
|
java.lang.Double
|
java.lang.Double,
java.lang.Long, java.lang.Float, java.lang.Integer, java.lang.Short,
java.lang.Byte, java.math.BigDecimal, java.math.BigInteger, String, 0
(zero) if null is sent, primitive types of double, long, float, int,
short, byte
|
Object (generic)
|
java.util.Map
|
If
a Map interface is specified, creates a new java.util.HashMap for
java.util.Map and a new java.util.TreeMap for java.util.SortedMap.
|
String
|
java.lang.String
|
java.lang.String,
java.lang.Boolean, java.lang.Number, java.math.BigInteger,
java.math.BigDecimal, char[], any primitive number type
|
typed Object
|
typed Object
when you use [RemoteClass] metadata that specifies remote classname. Bean type must have a public no args constructor.
|
typed Object
|
undefined
|
null
|
null for Object, default values for primitives
|
XML
|
org.w3c.dom.Document
|
org.w3c.dom.Document
|
XMLDocument
(legacy XML type)
|
org.w3c.dom.Document
|
org.w3c.dom.Document
You
can enable legacy XML support for the XMLDocument type on any channel
defined in the services-config.xml file. This setting is only important
for sending data from the server back to the client; it controls how
org.w3c.dom.Document instances are sent to ActionScript. For more
information, see
|
**************************************************************************
从java到actionScript:
**************************************************************************
Java type
|
ActionScript type (AMF 3)
|
java.lang.String
|
String
|
java.lang.Boolean, boolean
|
Boolean
|
java.lang.Integer
|
int
|
If i < 0xF0000000 || i > 0x0FFFFFFF, the value is promoted to Number.
|
java.lang.Short
|
int
|
If i < 0xF0000000 || i > 0x0FFFFFFF, the value is promoted to Number.
|
java.lang.Byte
|
int
|
If i < 0xF0000000 || i > 0x0FFFFFFF, the value is promoted to Number.
|
java.lang.Byte[]
|
flash.utils.ByteArray
|
java.lang.Double
|
Number
|
java.lang.Long
|
Number
|
java.lang.Float
|
Number
|
java.lang.Character
|
String
|
java.lang.Character[]
|
String
|
java.util.Calendar
|
Date
|
Datesare sent in the Coordinated Universal Time (UTC) time zone. Clients andservers must adjust time accordingly for time zones.
|
java.util.Date
|
Date
|
Dates are sent in the UTC time zone. Clients and servers must adjust time accordingly for time zones.
|
java.lang.Object (other than previously listed types)
|
Typed Object
|
Objects are serialized using Java Bean introspection rules. Fields that are static, transient, or nonpublic are excluded.
|
java.util.Collection
|
mx.collection.ArrayCollection
|
java.lang.Object[]
|
Array
|
java.util.Map
|
Object (untyped)
|
InFlex 1.5, java.util.Map was sent as an associative or ECMA Array. Thisis no longer a recommended practice. You can enable legacy Map supportto associative Arrays, but Adobe recommends against doing this. Formore information, see Providing legacy AMF serialization on a channel
|
java.util.Dictionary
|
Object (untyped)
|
org.w3c.dom.Document
|
XML object
|
Youcan
enable legacy XML support for the XMLDocument type on any
channeldefined in the services-config.xml file. For more information,
seeProviding legacy AMF serialization on a channel.
|
null
|
null
|
Other classes that extend java.lang.Object
|
Object (typed)
|
Objects are serialized using Java Bean introspection rules. Fields that are static, transient, or nonpublic are excluded.
|
**************************************************************************
这里面我用得最多的还是一些基本数据类型如:int ,Number,String等,其次便是ArrayCollection,上面的表里居然没有,ft,它对应的是java的list。当要传送大量数据时,当然不能一个数据一个数据地传,在as这边定义一个类A,同样在java方也定义一个类B,里面的成员变量一样。然后将类A与类B对应起来,在转换时类A便会转换为类B,当然反过来也可以。
要做到这样的一个类的对应很简单。
只要求在as方类定义前面加上一条代码[RemoteClass(alias="/*classname*/")]即可。如:
As方:
package{
[Bindable]
[RemoteClass(alias="com.zhan.PersonInfo")]
public class PersonInfo{
public var name:String;
public var age:int;
public var gender:Boolean;
}
}
Java方 (get set 就不写出来了
):
package com.zhan{
public class PersonInfo{
public String name;
public int age;
public boolean gender;
}
}
这样便将两个类对应了起来,其中有几个点要特别注意:
1.两个类对应成员命名要求一致,就是一模一样,这样转换时才知道将哪个成员转换为哪个成员
2.命名首字母要小写,
这个其实是一编程规范,有时候会忘了。
(这个规则上可是吃了亏的,怎么也不知道问题出在哪,查了半天,无意间将命名改为小写,居然就可以了,看来平时编程时还是要规范点)
3.java转换为as时,要求as类提拱默认构造函数(即不带参数)
,从java转换为as时,其实是构造一个as对象去接收,如果这个as类要求有带参数的构造函数,估计会把lcds搞晕,当然吃亏的还是自已
分享到:
相关推荐
在Flex和Java之间进行交互时,数据类型转换是至关重要的,因为这两个平台有着不同的数据模型。Flex是一种基于ActionScript的富互联网应用程序(RIA)开发框架,而Java则是一种广泛使用的服务器端编程语言。理解Flex...
数据传输过程中,AMF会自动进行类型转换,使得Java对象和ActionScript对象能够互换。这种透明性减少了编码工作量,提高了开发效率。 为了测试这个工程,可以创建一个简单的Flex界面,包括按钮和数据网格,通过点击...
LCDS自动处理数据类型转换和网络通信。 5. **LCDS服务配置**:在Java环境中,需要配置LCDS服务,包括在服务器端部署LCDS服务组件,设置数据源和应用程序服务,以及在Flex客户端添加相应的服务引用。 6. **数据绑定...
2. **ActionScript与Java数据类型转换** 在Flex和Java之间进行数据交换时,数据类型转换是一个关键步骤。ActionScript和Java有着不同的数据类型体系,例如,ActionScript中的Date对象对应Java中的java.util.Date,...
Flex与Java通信是Web开发中的一个重要技术组合,它允许用户在浏览器端利用Flash的富互联网应用(RIA)特性,通过ActionScript与服务器端的Java应用程序进行数据交互。本压缩包包含了一个完整的Flex与Java通信的示例...
精通Flex 3.0――14.1.2 ActionScript与Java数据类型的转换 精通Flex 3.0――14.1.3 LCDS的内容结构 精通Flex 3.0――14.2 一个最基本的LCDS应用 精通Flex 3.0――14.3 通过Remoting访问服务端的应用 精通Flex 3.0―...
1. 数据转换:由于Flex和Java的数据类型可能不同,因此在交互过程中需要进行数据转换。例如,Java的Date对象在AMF中会被转换为Flex的Date对象。 2. 安全性:在前后端交互中,必须考虑安全性,包括数据加密、身份...
4. **ActionScript与Java数据类型映射** AMF允许Flex中的ActionScript对象和Java对象之间的无缝转换。例如,ActionScript对象可以映射到Java的POJO(Plain Old Java Object),使得数据交换更加便捷。 5. **事件...
本实例将深入探讨如何在这些技术之间有效地传递不同数据类型,包括字符串(String)、对象(Object)和数组(Array)。首先,让我们逐一了解这三个组件: 1. Flex:Flex是一种基于ActionScript和MXML的开源框架,...
BlazeDS是Adobe提供的一款开源中间件,它允许Flex客户端与Java后端进行实时双向通信,支持AMF(Action Message Format)数据交换,提供了高效的数据传输和Remoting服务。 1. **BlazeDS简介** BlazeDS是Flex和Java...
BlazeDS会在后台处理网络通信和类型转换。 5. **处理结果**:Java服务执行完毕后,结果会通过回调方法返回给Flex客户端,供进一步处理。 总结来说,"flex使用BlazeDS远程调用java例子"涉及到的技术主要包括Flex...
2. **Flex与Java通信**:使用HTTP服务或者 BlazeDS / LCDS (LiveCycle Data Services) 这样的中间件来实现在Flex与Java之间的数据交换。BlazeDS允许Flex客户端与Java服务器之间进行双向通信,通过AMF协议提供高效的...
LCDS负责在Flex前端和Java后端之间进行数据类型转换,以便两者可以有效通信。在本系统中,为了简化Flex和Java之间的数据交互过程,统一使用字符串类型作为数据传输的媒介,这使得交互过程简单易行。 系统功能上,...
开发过程中可能会遇到如网络连接错误、数据类型不匹配等问题。利用Flex的调试工具和日志记录,可以定位并解决问题。对于AMF通信问题,检查服务器端和客户端的配置是否一致,数据序列化是否正确。 8. **异常处理** ...
此外,还有其他通信方式,如OpenAMF,它们实现ActionScript与Java数据格式之间的转换,使用AMF协议进行序列化和反序列化操作。 ActionScript(AS3)是Flex的基础脚本语言,与Java和JavaScript有诸多相似之处。AS3中...
Adobe BlazeDS或LCDS是常用的AMF中间件,它们提供了将AMF数据转换为Java对象和服务的方法。 3. **异常处理和结果处理**:在调用远程方法时,我们需要添加事件监听器来处理可能的错误(FaultEvent.FAULT)和返回的...
Flex自动处理XML到ActionScript对象的转换,简化了数据的处理流程。 2. Flex与RESTful服务的整合: REST是一种轻量级的架构风格,通常与HTTP协议结合使用,以JSON或XML格式传输数据。在Flex中,可以使用URLLoader...
BlazeDS是开源项目,可以将ActionScript数据类型透明地映射到Java对象。当Flex客户端发送请求到服务器时,BlazeDS会将AMF消息转换为Java对象,然后传递给Servlet处理。 2. **配置Servlet**:在Java后台,你需要配置...
5. **Flex到Java的类型映射**:BlazeDS自动处理ActionScript和Java对象之间的类型转换,使得跨语言开发更加便捷。 6. **事件驱动模型**:BlazeDS支持事件驱动编程,使得客户端可以响应服务器端的事件,提高了交互性...