Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何正确配置我的GWT活动和ActivityMapper?_Java_Gwt_Gwt Platform_Gwt Activities - Fatal编程技术网

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