在论坛中看到不少flex与webServices通信中的传值问题,上半年刚好做了个项目,其中flex与后台通信当时也让我大伤脑筋(后台是java的),现把flex与webServices通信中的注意点罗列一下:
1,首先肯定可以传自定义对象,和对象的集合,但对被传递的对象和集合有不少限制
1.1,自定义对象中的属性不能有数组或者集合,自定义对象的构造函数必须是无参数的
1.2,在传集合,如ArrayList时,java端最好用1.5或者更高的版本,用泛型指定类型;flex端对应的集合是一个自定义的ArrayCollection, 可以利用flex builder自动生成,过程如下(我的 flex buidler 以插件的形式集成到myeclipse中):右击工程->import->flex builder->Web Services(WSDL),然后在服务器启动的情况下输入Web Services的url地址,IDE会自动帮你生成flex的通信类,如java端参数是ArrayList<MyObj> 生成的flex类是arrayOfMyObj.
2, 在felx一端,接受webServices返回值的类型只有三种类型,一个是简单类型,这个很容易处理;一个是ProxyObjct类,对应于java中的自定义类;再有一个就是ArrayCollection了,对应于java中的集合了,如list。所以在flex端接受返回值的时候需要手工进行类型转换,我自己利用as3的反射做了个工具类,可以实现类型的自动转换。
3, Date类型是不能传递的,只能把date转换成对应的String进制传递。
4,as3中的Nubmer类型变量一定要有显示的初始化值,它的默认值传到java会引起异常,导致通信失败,同时Number的最值范围要比java中的long 类型小,Number有效值是56位,而long是64位的。
5,尽量避免用WebServices的方式实现flex与后台通信,无论从效率、安全性还是健壮性上考虑,WebServices都是最差的选择。