2010-01-14 105 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