当我执行异步方法调用时调用onFailure(...)方法的原因是什么?控制台输出总是“ERROR !!!!”。
MyEntryPoint.java:
package com.example.smartgwtproject.client;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
//...
public class MyEntryPoint implements EntryPoint {
public void onModuleLoad() {
GreetingServiceAsync service = (GreetingServiceAsync) GWT.create(GreetingService.class);
//...
service.getFileList(new AsyncCallback<List<String>>(){
@Override
public void onFailure(Throwable caught) {
System.out.println("ERROR!!!!");
}
@Override
public void onSuccess(List<String> result) {
System.out.println("OK!");
}
});
//...
}
}
.gwt.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.5.1//EN"
"http://google-web-toolkit.googlecode.com/svn/tags/2.5.1/distro-source/core/src/gwt-module.dtd">
<module rename-to='dlaconfigcenter'>
<inherits name='com.google.gwt.user.User'/>
<inherits name="com.smartgwt.SmartGwt"/>
<entry-point class='com.example.smartgwtproject.client.MyEntryPoint'/>
<source path='client' />
<source path='shared' >
<include name="GreetingServiceImpl.java"/>
</source>
</module>
GreetingService的:
package com.example.smartgwtproject.client;
//...
@RemoteServiceRelativePath("greet")
public interface GreetingService extends RemoteService {
List<String> getFileList();
}
GreetingServiceAsync:
//...
public interface GreetingServiceAsync {
void getFileList(AsyncCallback<List<String>> callback);
}
答案 0 :(得分:2)
<include name="GreetingServiceImpl.java"/>
不应该在gwt.xml中。 Impl类是服务器端代码,不应作为GWT源包含在内。如果您使用任何非模拟类,如Apache Commons等第三方库,则会出现编译错误。
您可能需要对web.xml进行一些更改以指向GreetingsServiceImpl类,这可能是您尝试在gwt.xml中实现的。我建议您仔细阅读本教程,仔细检查您的配置。 http://www.vogella.com/tutorials/GWT/article.html#server
假设您的配置正常。 GreetingServiceImpl类中的getFileList()方法可能会引发异常。这通常是触发onFailure方法的原因。因为你的GreetingServiceImpl我不能确定这是不是正在发生的事情。
404错误意味着GWT无法找到您的Impl类。有两种可能性。
如果您在托管模式下运行,则#1不应该是这种情况。如果您不确定,请在此处提供有关托管模式的更多信息:http://www.gwtproject.org/doc/latest/DevGuideCompilingAndDebugging.html
对于#2,请参考我上面链接的教程。如果您的Servlet(Impl类)未正确映射,您将继续获得404.基本上,您需要com.example.smartgwtproject.sever包中的Impl类,并在Web中具有相应的记录。 XML。它应该看起来像:
<servlet>
<servlet-name>GreetingService</servlet-name>
<servlet-class>com.example.smartgwtproject.sever.GreetingServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>GreetingService</servlet-name>
<url-pattern>/GreetingService</url-pattern>
</servlet-mapping>
但是我不能为你的设置做好准备。再次,请参阅教程了解所有细节。 Tutorial Link