2012-11-13 106 views
1

假設我在GWT中有一個比POJO更復雜的類實現,但是它的方法仍然比較簡單,即除了getter和setter方法之外,它還有一些實用方法,可以在客戶端和服務器代碼中成功調用新的Foo()。在客戶端和服務器之間共享GWT類的實現

我的問題是這樣的:如果我有這樣一個對象的實例,我如何在GWT服務器和客戶端之間進行通信?也就是說,如何在傳遞其字段的同時保留在對象被反序列化時調用其他方法的能力?

我們目前在服務器端使用Jackson和在客戶端使用AutoBeans,但這嚴格限於POJO類,因爲AutoBeans來自只包含getter和setter的接口,並且沒有辦法(自動)拉取該數據變成更有用的對象。

對於這裏完整起見的問題http://pastebin.com/H2ea0W6A

+0

你可以將數據分成一個bean發送到服務器,另一方面有一個客戶端和服務器共享的邏輯對象? – Robertiano

回答

2

實際上你可以放邏輯您AutoBeans內的對象,使用@Category
https://code.google.com/p/google-web-toolkit/wiki/AutoBean#Categories

然而它不會爲你setKWHR和工作getKWHR(至少不是如果命名像屬性訪問器)。

將這些方法移出Energy類可能會更容易將它僅留爲DTO。
或者,將這樣一個DTO(至少在客戶端上,DTO是AutoBean)包裝到另一個可能帶來邏輯的對象中(並簡單地將getMMBTUgetDisplayUnit委託給包裝的DTO)。

要麼是這樣的,要麼使用類似Piriti的東西在客戶端而不是AutoBean上進行反序列化;或將您的AutoBean數據複製到Energy實例中。

+0

雖然這是我所害怕的:儘管這是我所害怕的:沒有辦法在「幕後」做到這一點,並且無論何時需要額外的方法(無論是調用它還是複製/包裝數據在某種程度上) – Bjartr

+0

我已經看過@Category之前,它非常繁瑣,因爲它需要創建工廠爲每種類型我們要做到這一點(而不是單一工廠所有類型共享) – Bjartr

相關問題