【问题标题】:RequestFactory with ValueType for interfaces / abstract classes接口/抽象类的带有 ValueType 的 RequestFactory
【发布时间】:2023-05-28 01:59:01
【问题描述】:

以下是我的域类

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 中处理这种继承?
我应该将 Vehicle 从 ValueProxy 更改为 EntityProxy 吗?
那么如何实现 VehicleLocator 的方法呢?

【问题讨论】:

    标签: gwt requestfactory


    【解决方案1】:

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

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

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

    【讨论】:

    • 那么PersonProxy的getVehicle()应该返回什么?车辆? MotorcycleProxy 应该扩展 Vehicle 接口吗?或者我应该有 VehicleProxy?
    • 对,我错过了这部分 - 抱歉。请看看我的编辑。