1

我正在使用带有 flex 前端的 java 后端。而且当我想使用标签函数时,它不会加载诸如值对象之类的深入属性,就像它在flex端被延迟加载一样,我确定它不是来自后端,因为我已经检查过了在那边。

我在数据网格中也得到了它,它不会一次加载所有值。

例如

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

}

Class Doe{
 var lastName:String;
}

我要求在我的后端获取所有 John's,后端给我所有包含 Doe 的 John's。现在在 flex 端,当我收到该数据时,我会从 callresponder 触发结果事件。但是它仍然不能将 doe 加入到 Johns 中,john 的 doe 属性仍然为空。当我第二次问它时,它现在是关于母鹿的,所以它看起来像前端方式的延迟加载......

我究竟做错了什么?

问候

4

2 回答 2

1

完全理解你的问题很棘手。但是,我在这些方面遇到了很多很多次的问题。所以我得到了一般问题。

使用 BlazeDS 要记住的一件事是,通过网络发送的类是序列化和反序列化的。简而言之,通过网络写入和读取的唯一内容是每个类的字段/属性。您必须密切注意 Java 端和 Flex 端的类中的基本数据类型。确保所有属性/字段和公共 getter/setter 匹配并确保它们清晰。

我所说的“清晰”的意思是,当 BlazeDS 无法确定将哪些变量粘贴在哪里时,它会感到困惑。

尽管您的 Doe 类不是字符串,但它只包含一个字符串。因此,当它通过网络发送时,它看起来就像一个字符串。在这种情况下,我看到 blazeds 感到困惑。它看到两个字符串来自网络,但它无法确定哪个字符串在哪里。对你来说,John 包含“Doe”和一个字符串,但最终 BlazeDS 真正看到的只是一个字符串和一个字符串。

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

基本点是:当你收到数据时出现 null ,这意味着你有序列化问题。BlazeDS 无法弄清楚如何读取写入网络的内容。因此,要么调整您的字段、属性和公共 getter/setter ....,要么编写您自己的方法来序列化您的对象。

这个页面非常详细地描述了 blazeds 序列化(以及如何自己处理它):

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

一旦我完全理解了这一点,这种错误就会少得多。

希望有帮助,

-公斤

于 2010-02-05T06:16:06.633 回答
0

好吧,我仍然不知道为什么会这样,但我已经通过使用平面 dto 解决了它,现在我正在使用完整的 MVC 架构......

于 2010-01-15T12:54:15.927 回答