我是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
类(我真的不想),它就可以了。
我试图谷歌并发现几个相关的帖子,但这些问题实际上都没有适用于我。有人可以帮助我吗?
答案 0 :(得分:4)
如果MyRequest
中的方法在MyService
中有域名对应方,则@Service
应指向MyService.class
,而不是MyModel.class
。
使用ServiceLocator
这一事实告诉RequestFactory应该查找实例方法而不是静态方法,并使用ServiceLocator
来获取{{1}指向的服务实例}}。如果您在@Service
中有一个匹配的find
方法(即编译时验证已经通过),那么您在运行时遇到错误,因为返回了MyModel
实例您的MyService
无法投放到ServiceLocator
注释中引用的MyModel
。