Java 如何正确配置我的GWT活动和ActivityMapper?
我有以下课程:Java 如何正确配置我的GWT活动和ActivityMapper?,java,gwt,gwt-platform,gwt-activities,Java,Gwt,Gwt Platform,Gwt Activities,我有以下课程: // The "backing bean" for DashboardDisplay.ui.xml (which is omitted for brevity). public class DashboardDisplay extends Composite implements AcceptsOneWidget { private EventBus eventBus; private PlaceController placeController; pr
// The "backing bean" for DashboardDisplay.ui.xml (which is omitted for brevity).
public class DashboardDisplay extends Composite implements AcceptsOneWidget {
private EventBus eventBus;
private PlaceController placeController;
private IsWidget content = null;
public DashboardDisplay(EventBus eventBus, PlaceController placeController) {
super();
setEventBus(eventBus);
setPlaceController(placeController);
}
// Getters and setters for all properties
// ...
@Override
public void setWidget(IsWidget widget) {
setContent(widget);
}
}
public class DashboardActivity extends AbstractActivity {
private AcceptsOneWidget container;
private ActivityManager manager;
private DashboardDisplay display;
public DashboardActivity(AcceptsOneWidget container, ActivityManager manager,
DashboardDisplay display) {
super();
setContainer(container);
setManager(manager);
setDisplay(display);
// I *believe* this ensures that the 'panel' passed in to the
// start method is always our 'container'. Yes?
manager.setDisplay(container);
}
// Getters and setters for all properties
// ...
@Override
public void start(AcceptsOneWidget panel, EventBus eventBus) {
display.setEventBus(eventBus);
panel.setWidget(display);
}
}
public class DashboardActivityMapper implements ActivityMapper {
private DashboardActivity activity = null;
// Getters and setter for activity.
@Override
public Activity getActivity(Place place) {
// Leaving arguments null because I'm confused about the object graph
// (read below).
return new DashboardActivity(null, null, null);
}
}
因此,我开始对Activities框架有了一些理解,但对它来说仍然是如此的陌生,以至于当我尝试远离Hello、GWT示例时,我几乎立刻就遇到了API方面的障碍
在我的应用程序的主GWT模块中,MyWebAppModule
,我试图实例化和配置这3个对象。但由于我仍然不确定如何使用他们的API,我遇到了实现问题:
public class MyWebAppModule implements EntryPoint {
@Override
public void onModuleLoad() {
// I'll worry about DI and getting GIN to work after
// I figure this basic stuff out.
EventBus eventBus = new SimpleEventBus();
PlaceController placeController = new PlaceController(eventBus);
MyWebAppPlaceHistoryMapper placeMapper = new MyWebAppPlaceHistoryMapper();
HomePlace homePlace = new HomePlace();
// WHERE THE PROBLEM STARTS
DashboardActivityMapper activityMapper = new DashboardActivityMapper();
ActivityManager manager = new ActivityManager(activityMapper, eventBus);
// Really not sure how to inject/configure this properly.
DashboardActivity dashboardActivity = new DashboardActivity(null, null, null);
// WHERE THE PROBLEM ENDS
PlaceHistoryHandler historian = new PlaceHistoryHandler(placeMapper);
historian.register(placeController, eventBus, homePlace);
historian.handleCurrentHistory();
}
}
DashboardActivityMapper
和DashboardActivity
,因此当我尝试在MyWebAppModule\onModuleLoad
中实例化和连接它们的实例时,它会导致问题。有人能帮我正确地实施吗?一旦我得到了一个工作示例,我确信我将能够连接活动框架中的其余“点”ActivityManager
似乎不会添加到任何其他类中。这是正确的吗?GWT是否会确保它在内存中保持活动状态,以便它始终在eventBus
上侦听我将其传递给PlaceChangeEvent
s?或者我是否需要将其添加/注册到任何内容总部
)时,您的仪表板活动表
负责创建并返回仪表板活动。这是您丢失的信息吗?
看
EventBus
有ActivityManager
的句柄(这样它就可以向其发送事件)。但是,ActivityManager
在其setDisplay
方法中的EventBus
上注册自身,当使用非空值调用时(当null
传递给setDisplay
时,取消注册自身),您不调用setDisplay
(顺便说一句,这意味着这些活动甚至不会被展示出来)谢谢@Thomas Broyer(+1)-我现在明白了我困惑的根源。我确实明白了以下几点:
仪表板活动表
负责创建并返回仪表板活动表
。然后,活动管理器
会获得仪表板活动表
,当它收到注册的主页
ode>EventBus,它知道调用DashboardActivity
的start
方法…(续)…如果是这样,我的问题的根源是:当ActivityManager
调用getActivity(homePlace)时
并返回一个仪表板活动
,仪表板活动发生了什么变化?它与仪表板活动#启动(AcceptsOneWidget,EventBus)有什么关系
invocation?。再次感谢!ActivityManager
将调用活动的start
方法,将您传递的值传递给它的setDisplay