Понимание GWT onModuleLoad
Вот, мое первое приложение GWT EntryPoint
осущ:
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();
}
}
Несколько вопросов:
- Мой звонок в
placeHistoryHandler
"sregister(...)
метод отображается как устаревший. Почему он устарел и каким он должен быть (по состоянию на GWT 2.5.1)? - Есть ли один
RootPanel
за модуль /EntryPoint
или есть только одинRootPanel
за приложение GWT (независимо от того, сколько у вас модулей)? - Какова связь между
mainPanel
(выше), который сам был добавлен кRootPanel
иAcceptsOneWidget
который передается в каждыйAbstractActivity#start
метод?
Заранее спасибо!
2 ответа
- Посмотрите здесь: GWT устарел: PlaceHistoryHandler.register?
- RootPanel, скорее всего,
<body>
элемент. Так что есть ровно один. - В большинстве случаев вы добавите один
AcceptsOneWidget
кRootPanel
, ВашActivity
должен создать его вид и установить его вAcceptsOneWidget
перешел кstart()
Взгляните на раздел "Активность и места" на gwtproject.org.
1) См. Ответ Кристиана Кютбаха
2) В вашем приложении GWT у вас должен быть файл MyModule.html. Этот файл был определен как файл приветствия в вашем файле web.xml. Внутри этого файла вы увидите, что включена версия javascript вашего приложения MyModule.nocache.js (после компиляции gwt). RootPanel, как сказал Кристиан, является вашей HTML-страницей. Будьте осторожны, вы можете использовать RootLayoutPanel или RootPanel в зависимости от того, хотите ли вы использовать Layout Panels или нет.
3) При использовании "Деятельности" и "Места" Менеджеру активности присваивается контейнер виджетов. Внутри этого контейнера виджетов фреймворк будет отображать вид новой активности при смене места. В этом смысл
activityManager.setDisplay(mainPanel);
Вы говорите, что когда вы переходите из одного места в другое, представление активности, соответствующее этому месту, должно быть помещено в mainPanel.