我已经通过BlazeDS向我的Flex应用程序公开了一个
Spring bean.在我的
Java代码中,我返回强类型列表.例如
public List<Folder> getFolders(String path) { return dao.getFolders(path); }
Flex应用程序将数据作为AS3对象实例的ArrayCollection接收 – 即不是我想要的文件夹的ArrayCollection.我已经注释了我的Flex类,如下所示:
package myproject.vo { import com.adobe.cairngorm.vo.IValueObject; import mx.collections.ArrayCollection; [Bindable] [RemoteClass(alias="myproject.vo.Folder")] public class Folder extends PersistentObject implements IValueObject { public function Folder() {} } }
我检查了我的Java Folder类中有getter / setter以匹配Flex Folder类中的属性.有任何想法吗?
解决方法
我终于通过一些谷歌搜索解决了这个问题.以下是我发现的Flex远程处理规则:
>注释Flex值对象以指示与其相关的java类.如果包名称不同,这是必不可少的. – 例如[Bindable] [RemoteClass(alias =“package.JavaClass”)] public class FlexClass {}
>构造函数必须匹配Flex和Java值对象.为了简单起见,我最终坚持使用公共的无参数构造函数.
> Getters和setter必须匹配Flex和Java值对象.
>最后一条规则是一个破解者 – 你必须实例化你需要反序列化的任何类.从表面上看这应该不是问题,但是我花了好几天试图反序列化远程getobjectsAtPath()调用的结果 – 包含Folder和Document实例的PersistentObjects列表(两者都是PersistentObject的子类).如果你没有显式地实例化类(在我的情况下是Folder类),它不会包含在SWF文件中(与Java不同)!我最终创建了一个类型为Folder的虚拟变量来解决这个问题.
感谢大家的建议.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。