我正在使用带有Flex前端的Java后端。当我想使用labelfunction时,它不会加载诸如value对象之类的深入属性,就像是在flex端延迟加载一样,我确定它不是从后端来的,因为我已经检查了它在那边。
我在datagrid中也得到了它,它不会一次加载所有值。
例如
Class John{
var name:String;
var lastName:Doe;
}
Class Doe{
var lastName:String;
}
我要求后端得到所有约翰的,后端给我所有包含母鹿的约翰的。现在在flex端,当我接收到数据时,我会从callresponder中触发结果事件。但是仍然不能让美国能源部加入约翰斯,约翰的doe属性仍然为空。当我第二次询问时,它现在是关于母鹿的,所以它看起来像是在以前端方式延迟加载...
我究竟做错了什么?
招呼
最佳答案
完全理解您的问题很棘手。但是,我在很多方面都遇到了这些问题。所以我得到了普遍的问题。
使用BlazeDS时要记住的一件事是,通过网络发送的类被序列化和反序列化。简而言之,意味着通过网络编写和读取的唯一内容是每个类的字段/属性。您必须密切注意Java端和Flex端的类中的基本数据类型。确保所有属性/字段与公共获取者/设置者匹配,并确保它们清晰。
我所说的“明确”是,当BlazeDS无法弄清楚哪个变量应该放在哪里时,就会感到困惑。
尽管您的Doe类不是String,但它仅包含一个字符串。因此,当它通过网络发送时,看起来就像一个字符串。在这种情况下,我已经看到这些火焰变得困惑。它看到两个字符串从网络中传出,并且无法确定哪个去向。对您而言,John包含“ Doe”和一个字符串,但最终BlazeDS真正看到的只是一个字符串和一个字符串。
为了测试,在您的基本示例中,将Doe.lastName更改为Integer或其他对象。很有可能,它将在另一端停止为空。如果仍然为null,则您的ActionScript和Java类(John&Doe)不正确匹配,或者它们太含糊。
基本要点是:当接收数据时出现空值时,这意味着序列化有问题。 BlazeDS无法弄清楚如何读取写入网络的内容。因此,要么调整字段,属性和公共获取器/设置器……,要么编写自己的方法来序列化对象。
本页详细描述了炫耀的序列化(以及如何自行处理):
http://livedocs.adobe.com/blazeds/1/blazeds_devguide/help.html?content=serialize_data_2.html
一旦我完全理解了这一点,我就不会有太多这样的错误了。
希望能有所帮助,
-公斤