带有ValueType的RequestFactory用于接口/抽象类

时间:2011-08-08 08:13:20

标签: gwt requestfactory

以下是我的域类

class Person { 
     String getName(); 
     Vehicle getVehicle(); 
} 

interface Vehicle { 
   String getCompanyName(); 
   String getRegNo(); 
   Point getParkingSpaceRequired(); 
} 

abstract class AbstractVehicle { 
} 

class Motorcycle extends AbstractVehicle { 
} 

class Car extends AbstractVehicle { 
} 

创建PersonProxy作为EntityProxy是直截了当的,并且对person.getName()

工作正常

我已经将VehicleProxy创建为ValueProxy并使用.with('vehicle')调用fire() 但是我收到了错误:

域类型com .... AbstractVehicle $$ EnhancerByCGLIB $$ e86549b9无法发送到客户端。

在PersonProxy上 我得到了@ProxyFor(value = Person.class,locator = PersonLocator.class)
在VehicleProxy上我得到了@ProxyFor(value = Vehicle.class)

那么,如何在RequestFactory中处理这种继承?
我应该从ValueProxy将Vehicle更改为EntityProxy吗? 那么如何实现VehicleLocator的方法呢?

1 个答案:

答案 0 :(得分:0)

您应该为MotorocycleCar编写代理接口,而不是为接口Vehicle编写代理接口。我从来没有使用requestfactory代理接口接口(而不是类),在我看来,这就是你得到这个例外的原因。

[编辑]
在上述情况下,您必须将Vehicle接口移动到shared包,以便服务器和客户端站点都能看到它。对于枚举而言,这是非常常见的解决方案 - 域类具有一些枚举属性,而代理接口也必须包含此属性的访问者。

其他解决方案(我认为可能不起作用)是为Vehicle接口编写代理接口,MotorocycleCar的代理接口应该扩展它。