添加到GWT RootPanel还是只设置默认视图?

时间:2012-11-17 00:50:39

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

我有以下GWT课程:

public class MyDefaultView extends Composite {
    // Uses UiBinder and just contains all the widgets for this view.
}

public class MyDefaultActivity extends AbstractActivity {
    @Inject
    private MyDefaultView myDefView;

    @Override
    public void start(AcceptsOneWidget panel, EventBus eventBus) {
        panel.setWidget(myDefView);
    }
}

public class MyActivityMapper implements ActivityMapper {
    @Override
    public Activity getActivity(Place place) {
        if(place instanceof MyDefaultPlace)
            return new MyDefaultActivity();
        else
            return null;
    }
}

public class MyAppModule implements EntryPoint {
    @Override
    public void onModuleLoad() {
        // Lots of initialization and wiring...

        // Why do I need this?!?
        MyDefaultView myDefaultView = GWT.create(MyDefaultView.class);
        RootPanel.add(myDefaultView);

        Place myDefaultPlace = GWT.create(MyDefaultPlace.class);

        PlaceHistoryHandler historyHandler = getHistoryHandler();
        historyHandler.register(myPlaceController, myEventBus, myDefaultPlace);
        historyHandler.handleCurrentHistory();
    }
}
  1. 为什么我需要将MyDefaultView添加到RootPanel,如果我要打电话给PlaceHistoryHandler#handleCurrentHistory()并在模块加载时显示MyDefaultView
  2. 如果我不应将MyDefaultView直接添加到RootPanel,那么我应该添加什么?
  3. 提前致谢!

1 个答案:

答案 0 :(得分:0)

1)您无需添加MyDefaultView,但需要一个实现AcceptsOneWidget的面板,并在活动管理器上设置该面板。这将使您的观点变得可见。

2)在大多数应用程序中,您拥有始终可见的应用程序的一部分。例如,顶部的栏显示用户名等。需要将此类面板添加到根面板。在该面板中,您应该可以看到视图的位置,应该使用实现AcceptsOneWidget的窗口小部件/面板。此小部件应通过setDisplay设置为您的activityManager中的显示。该小部件将传递给您活动中的start方法。以下是与ActivityManager和RootPanel一起使用的代码如下所示:

final ActivityManager activityManager = new ActivityManager(myActivityMapper, eventBus);

activityManager.setDisplay(rootView.getViewPanel());
Rootpanel.add(rootView);