在加载模块时,我在初始RPC调用加载数据时遇到问题。
如果失败的错误是一个空指针,它的行为就像它甚至根本不进行RPC调用一样,因为RPC内部的调试消息都不会出现在Eclipse的测试控制台中。
MenuItems对象是一个ArrayList< ArrayList<字符串> >实现IsSerializable并且具有this SO answer的SerializableWhiteList条目的对象。此对象在RPC RemoteServiceServlet中生成。
控制台也引用了
行History.fireCurrentHistoryState();
AppController.java中的(几乎与the GWT Contacts example相同)
关于为什么/在哪里/如何误入歧途的想法?初始RPC调用的任何其他实现示例也都很棒。
public class MVPtest implements EntryPoint {
MenuItems mItems;
public void onModuleLoad() {
MainServiceAsync rpcService = GWT.create(MainService.class);
System.out.println("Inside of mod load. rpcService = " + rpcService.toString());
rpcService.getMenuItems(new AsyncCallback<MenuItems>() {
public void onFailure(Throwable caught) {
System.out.println("I failed...");
caught.printStackTrace();
}
public void onSuccess(MenuItems result) {
System.out.println("I got the menuitems.");
mItems = result;
}
});
HandlerManager eventBus = new HandlerManager(null);
AppController appViewer = new AppController(rpcService, eventBus, mItems);
appViewer.go(RootLayoutPanel.get());
}
}
rpcService调试消息产生非null:
Inside of mod load. rpcService = com.******.******.test.client.MainService_Proxy@4f07f3b5
答案 0 :(得分:0)
这句话很危险:
AppController appViewer = new AppController(rpcService, eventBus, mItems);
因为客户端的代码将被执行而不需要您的呼叫响应。
这样的事情应该有效:
public class MVPtest implements EntryPoint {
MenuItems mItems;
public void onModuleLoad() {
MainServiceAsync rpcService = GWT.create(MainService.class);
System.out.println("Inside of mod load. rpcService = " + rpcService.toString());
rpcService.getMenuItems(new AsyncCallback<MenuItems>() {
public void onFailure(Throwable caught) {
System.out.println("I failed...");
caught.printStackTrace();
}
public void onSuccess(MenuItems result) {
System.out.println("I got the menuitems.");
mItems = result;
HandlerManager eventBus = new HandlerManager(null);
AppController appViewer = new AppController(rpcService, eventBus, mItems);
appViewer.go(RootLayoutPanel.get());
}
});
}
}