GWT RPC呼叫OnModuleLoAD实现故障



我在加载模块时遇到一个问题。

我正在此处和此处调整代码。

如果失败是一个无效的指针,它的行为似乎根本没有进行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());
           }
        });
     }
}

最新更新