理解GWT onModuleLoad

时间:2013-12-06 15:13:25

标签: java gwt uibinder gwt-activities gwt-places

看哪,我的第一个GWT应用程序EntryPoint impl:

public class MyModule implements EntryPoint {
    private SimplePanel mainPanel = new SimplePanel();

    @Override
    public void onModuleLoad() {
        // Extract all root-level dependencies from the injector.
        // Using Gin here.
        EventBus eventBus = injector.getEventBus();
        PlaceController placeController = injector.getPlaceController();
        SignInEventListener signInEventListener = injector.getSignInEventListener();
        PlaceHistoryMapper placeHistoryMapper = injector.getPlaceHistoryMapper();

        // Start the activity manager.
        activityManager = new ActivityManager(signInEventListener, eventBus);
        activityManager.setDisplay(mainPanel);

        // Start the place history mapper.
        placeHistoryHandler = new PlaceHistoryHandler(placeHistoryMapper);
        placeHistoryHandler.register(placeController, eventBus, startingPlace);

        // Add the main panel to the RootPanel.
        RootPanel.get().add(mainPanel);

        // Navigate to the place represented by the current URL, otherwise the startingPlace.
        placeHistoryHandler.handleCurrentHistory();
    }
}

几个问题:

  1. 我对placeHistoryHandler的{​​{1}}方法的调用显示为已弃用。为什么它被弃用以及它应该是什么(从GWT 2.5.1开始)?
  2. 每个模块/ register(...) 是否有一个RootPanel ,或者每个GWT应用只有一个EntryPoint (无论如何你有很多模块)?
  3. RootPanel(上方)已添加到mainPanel的{​​{1}}与传递到每个RootPanel方法的AcceptsOneWidget之间的连接/关系是什么? ?
  4. 提前致谢!

2 个答案:

答案 0 :(得分:2)

  1. 看这里:GWT deprecated: PlaceHistoryHandler.register?
  2. RootPanel很可能是<body>元素。所以只有一个。
  3. 在大多数情况下,您会向AcceptsOneWidget添加一个RootPanel。您的Activity必须创建其视图并将其设置为AcceptsOneWidget传递给start()
  4. 查看Activity and Places section of gwtproject.org

答案 1 :(得分:0)

1)见Christian Kuetbach回答

2)在你的GWT应用程序中,你应该有一个MyModule.html文件。此文件已在web.xml文件中定义为欢迎文件。在这个文件里面你会看到你的应用程序MyModule.nocache.js的javascript版本(在gwt编译之后)。 Christian所说的RootPanel是你的html页面。请注意,如果要使用布局面板,可以使用RootLayoutPanel或RootPanel。

3)使用“活动和场所”时,活动管理器将获得一个小部件容器。在此小部件容器内,框架将在更改位置时放置新活动的视图。这就是

的含义
activityManager.setDisplay(mainPanel);

您的意思是,当您从一个地方转到另一个地方时,与该地点对应的活动视图应放在mainPanel内。