GWT RPC调用inModuleLoad实现失败

时间:2014-02-05 18:24:35

标签: gwt rpc mvp

在加载模块时,我在初始RPC调用加载数据时遇到问题。

我正在调整herehere的代码。

如果失败的错误是一个空指针,它的行为就像它甚至根本不进行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

1 个答案:

答案 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());
           }

        });
     }
}