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

时间:2014-06-18 06:29:28

标签: gwt requestfactory

我是GWT的新手,并使用版本2.6和RequestFactory,但我遇到了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 个答案:

答案 0 :(得分:4)

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

使用ServiceLocator这一事实告诉RequestFactory应该查找实例方法而不是静态方法,并使用ServiceLocator来获取{{1}指向的服务实例}}。如果您在@Service中有一个匹配的find方法(即编译时验证已经通过),那么您在运行时遇到错误,因为返回了MyModel实例您的MyService无法投放到ServiceLocator注释中引用的MyModel