我在加载模块时遇到一个问题。
我正在此处和此处调整代码。
如果失败是一个无效的指针,它的行为似乎根本没有进行RPC调用,因为RPC内部的调试消息都不会出现在Eclipse的测试控制台中。
。menuitems对象是一个arraylist<ArrayList<字符串>>实现Isserializable且根据此答案具有序列化的Whitelist条目的对象。此对象是在RPC远程服务器服务中生成的。
控制台还引用该行
History.fireCurrentHistoryState();
在appcontroller.java中(几乎与GWT联系人示例相同)
关于为什么/何处/如何误入歧途的想法?初始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调试消息产生了一个非编号:
Inside of mod load. rpcService = com.******.******.test.client.MainService_Proxy@4f07f3b5
此语句很危险:
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());
}
});
}
}