2011-03-25 42 views
0

我有相同(想象getter和setter)2 Java類:BlazeDS的未映射AS對象正確

class ScheduledEvent { 
    private String eventName; 
    private List<eventValues> values;  
} 

class StartEvent { 
    private String eventName; 
    private List<eventValues> values;  
} 

在Flex端,我有相應的對象:

[RemoteClass(alias="com.project.events.ScheduledEvent")] 
public class ScheduledEvent { 
    public var eventName:String; 
    public var values:ArrayCollection; 
} 

[RemoteClass(alias="com.project.events.StartEvent")] 
public class StartEvent{ 
    public var eventName:String; 
    public var values:ArrayCollection; 
} 

現在有兩個相同的類的原因。當某些東西是「預定的」時,我應該得到ScheduleEvent對象,並且當一個事件開始時,我應該得到StartEvent對象。根據我回來的對象,我做了不同的事情。

我的問題是,在後端,它會送我ScheduleEvent對象,但一旦到了彈性側(通過BlazeDS的),它成爲一個StartEvent ....

起初,我認爲這是因爲這兩個事件具有完全相同的變量,所以我嘗試通過添加一個虛擬變量(String foobar)來改變ScheduledEvent,但這似乎沒有什麼區別。

有沒有人有任何想法,爲什麼發生這種情況,我怎麼能解決它?

謝謝。

編輯: 我應該提到,我沒有使用java方法調用...我使用BlazeDS消息系統。這就是爲什麼我不使用「一個響應者的一個Java方法調用」方法。所以,在message.body中,我應該得到ScheduledEvent,但我一直收到StartEvent。我想知道是否這是因爲兩個對象具有相同的屬性,BlazeDS不知道如何正確映射它們......我甚至在java服務層中放置了一個斷點,以確保正在發送適當的對象但是在BlazeDS序列化並將其反序列化到flex側時,它現在成爲StartEvent。我想知道如何解決這個問題。謝謝。

+1

你忘了在'alias =「com.project.events.scheduledEvent」''中大寫's'嗎? – Jeremy 2011-03-25 18:28:27

+0

不......它在那裏......當我在StackOverflow中輸入時,缺少的「s」只是一個錯字......我現在會修復它,儘管...感謝您指出它。 – LazerWonder 2011-03-25 19:56:42

回答

1

通常的做法是讓一個類擁有一個類型屬性,然後根據類型決定要做什麼。

就BlazeDS行爲而言:這裏沒有足夠的信息來確定知道,但如果您有一個java方法調用,返回的對象將始終是相同的類型。如果你有一個名爲getEvent()的方法返回一個sheduledEvent對象,那麼它總是返回一個scheduledEvent對象。如果你有兩個方法調用 - getScheduledEvent()和getStartEvent() - 那麼你可以在彈性方面有不同的響應者,並在那裏開始你不同的邏輯。

+0

是 - 一個事件響應者...但是,在這種情況下,服務器通過BlazeDS發送消息。所以,服務器通過通道發送消息,而message.body應該是ScheduledEvent,但我不斷收到StartEvent。我甚至在服務器端代碼上放了一個斷點,並且在消息通道中發送了一個ScheduledEvent,但是到了Flex端時,它就變成了StartEvent。 希望這會消除混亂。我應該提到我使用的消息系統。 – LazerWonder 2011-03-28 16:30:16