2010-01-14 169 views
1

我正在使用带flex前端的java后端。而当我想使用labelfunction它不会加载深度属性,如值对象,它就像它是懒惰加载在flex侧,我敢肯定它不是从后端来,因为我已经检查过在那边。深度加载值对象的问题(前端延迟加载?)

我已经在datagrid的它也没有一次加载所有的值。

例如

Class John{ 
var name:String; 
var lastName:Doe; 

} 

Class Doe{ 
var lastName:String; 
} 

我在后端要求得到所有约翰的,后端给了我所有约翰其中包含Doe的。现在,在Flex侧,当我收到该数据时,会从callresponder中触发结果事件。但它仍然无法进入约翰的母体,约翰的母亲财产仍然是空的。当我第二次问到母鹿的时候,所以它看起来像前端方式的延迟加载...

我在做什么错?

电贺

回答

0

好吧,我仍然不知道为什么这样做,但我已经通过使用平面DTO的解决了这个问题,现在我使用的是完整的MVC架构...

1

这是棘手完全理解你的问题。但是,我遇到过许多这样的问题。所以我得到一般问题。

BlazeDS记住的一件事是通过网络发送的类是序列化和反序列化的。简而言之,意思是通过网络书写和阅读的唯一东西是每个类的字段/属性。您必须在Java端和Flex端都关注类中的基本数据类型。确保所有属性/字段和公共获得者/设置者匹配并确保他们清楚。

我的意思是“清晰”是,当BlazeDS无法弄清楚哪些变量粘在哪里时会感到困惑。

虽然您的Doe类不是字符串,但它只包含一个字符串。所以,当它通过网络发送时,它看起来就像一个字符串。在这样的情况下,我已经看到blazeds变得困惑。它看到两个字符串通过网络,它不知道哪里去了哪里。对你来说,John包含“Doe”和一个String,但是所有BlazeDS最终都会看到一个String和一个String。

只是为了测试,在您的基本示例中,将Doe.lastName更改为Integer或其他对象。有可能,它会在另一端停止。如果它仍然为空,那么您的ActionScript和Java类(John & Doe)不能正确匹配,或者它们太模糊。

基本观点是:当您收到数据时事情变为空,这意味着您在序列化时遇到问题。 BlazeDS无法弄清楚如何读取写入网络的内容。所以要么调整你的字段,属性和public getters/setters ....或者编写你自己的序列化对象的方法。

本页面描述BlazeDS的序列化(以及如何处理它自己)很详细:

http://livedocs.adobe.com/blazeds/1/blazeds_devguide/help.html?content=serialize_data_2.html

一旦我完全理解这一点,我有这样的远远更少的错误。

希望帮助,

-KG