GWT 2.6 - RequestFactory Locator 找不到类似的域方法

Posted

技术标签:

【中文标题】GWT 2.6 - RequestFactory Locator 找不到类似的域方法【英文标题】:GWT 2.6 - RequestFactory Locator Could not find domain method similar to 【发布时间】:2014-06-18 06:29:27 【问题描述】:

我是 GWT 的新手,并且使用带有 RequestFactory 的 2.6 版,但我遇到了 GWT 验证问题。一旦我开始使用 Locator 和 LocatorService,GWT 就无法在域端找到该方法(在此之前,一切都为我找到了)。

下面是我的实现:

我的请求工厂如下所示:

public interface MyRequestFactory extends RequestFactory 
    MyRequest createRequest();

    @Service(value = MyModel.class, locator = MyModelServiceLocator.class)
    public interface MyRequest extends RequestContext 
        Request<MyModelProxy> find(String id);
    

我的服务定位器如下所示:

public class MyServiceLocator implements ServiceLocator 
    private static MyService serviceInstance;

    private static MyService getServiceInstance() 
        if (serviceInstance == null) 
            serviceInstance = new MyService();
        
        return serviceInstance;
    

    @Override
    public Object getInstance(Class<?> klass) 
        return MyServiceLocator.getServiceInstance();
    

我的服务看起来像:

public class MyService 
    public MyModel find(String id) 
        // implementations
    

但 GWT 验证抱怨无法在域端找到“MyModel find(String)”。但是一旦我将此方法放入MyModel 类(我真的不想这样做),它就可以正常工作了。

我尝试用谷歌搜索并找到了几个相关的帖子,但这些问题都没有真正适用于我。有人可以帮帮我吗?

【问题讨论】:

【参考方案1】:

如果MyRequest 中的方法在MyService 中有对应的域,那么@Service 应该指向MyService.class,而不是MyModel.class

您使用ServiceLocator 的事实告诉RequestFactory 它应该寻找实例方法而不是静态方法,并且将使用ServiceLocator 来获取@Service 指向的服务实例。如果您在 MyModel 中有匹配的 find 方法(即编译时验证将通过),那么您将在运行时遇到错误,因为您的 ServiceLocator 返回的 MyService 实例不能转换为您在 @Service 注释中引用的 MyModel

【讨论】:

以上是关于GWT 2.6 - RequestFactory Locator 找不到类似的域方法的主要内容,如果未能解决你的问题,请参考以下文章

GWT RequestFactory 性能

什么时候应该使用 RequestFactory 与 GWT-RPC?

GWT/AppEngine:设计 RequestFactory 工作流以更好地处理异常

如何在小工具中使用 GWT RequestFactory?

GWT RequestFactory + CellTable

GWT-RPC 和 RequestFactory 是互斥的吗?