Как правильно использовать ActivityMapper/ActivityManager, чтобы расположить представления, отображаемые на макете главной страницы?

Это приложение пытается отобразить 3 вида на главной странице дисплея следующим образом:

  1. AAAView в верхней части страницы
  2. BBBView в середине страницы
  3. CCCView в нижней части страницы

ПРОБЛЕМА: хотя приложение работает, оно НЕ позиционирует представления (т. Е. "AAAView", "BBBView", "CCCView"), как описано выше.

(Например, "AAAView" отображается в "нижней части страницы", а "BBBView" и "CCCView" отображаются в "средней части страницы"...-- Почему это так?)

Я предполагаю, что проблема является результатом моего неправильного использования (недопонимания?) Классов ActivityMapper/ActivityManager для правильного размещения (или позиционирования) представлений / панелей на главной странице.

К сожалению, я не смог найти исчерпывающую документацию о том, как правильно / эффективно использовать классы ActivityMapper/ActivityManager. (Примеры приложений, которые я видел до сих пор, как правило, были слишком сложными для меня, чтобы точно определить, как классы ActivityMapper/ActivityManager работают, чтобы указать, где панель / представление отображается на главной странице)

Код, используемый в приложении, показан ниже...

(любой совет или объяснение того, что я делаю неправильно, был бы очень признателен... - И я полагаю, что я не единственный человек, борющийся с этой концепцией)

Спасибо за любую помощь!!

/src/aaa/bbb/ccc/app.gwt.xml

<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='app'>
    <inherits name='com.google.gwt.user.User' />
    <inherits name='com.google.gwt.user.theme.standard.Standard' />
    <inherits name="com.google.gwt.activity.Activity" />
    <inherits name="com.google.gwt.place.Place" />
    <entry-point class='aaa.bbb.ccc.client.AppEntryPoint' />
    <source path='client' />
    <source path='shared' />
</module>

/ SRC / ааа / В / ссс / клиент / AppEntryPoint

package aaa.bbb.ccc.client;

import com.google.gwt.activity.shared.ActivityManager;

public class AppEntryPoint extends LayoutPanel implements EntryPoint
{

    private LayoutPanel mainView = null;

    interface AppEntryPointUiBinder extends UiBinder<LayoutPanel, AppEntryPoint>
    {
    }

    private static AppEntryPointUiBinder uiBinder = GWT.create(AppEntryPointUiBinder.class);

    @UiField
    SimplePanel topOfPage;

    @UiField
    SimplePanel middleOfPage;

    @UiField
    SimplePanel bottomOfPage;

    public AppEntryPoint()
    {
        super();
    }

    AcceptsOneWidget top = new AcceptsOneWidget()
    {
        public void setWidget(IsWidget activityWidget)
        {
            Widget widget = Widget.asWidgetOrNull(activityWidget);
            mainView.setWidgetVisible(topOfPage, widget != null);
            topOfPage.setWidget(widget);
        }
    };

    AcceptsOneWidget mid = new AcceptsOneWidget()
    {
        public void setWidget(IsWidget activityWidget)
        {
            Widget widget = Widget.asWidgetOrNull(activityWidget);
            mainView.setWidgetVisible(middleOfPage, widget != null);
            middleOfPage.setWidget(widget);
        }
    };    

    AcceptsOneWidget bot = new AcceptsOneWidget()
    {
        public void setWidget(IsWidget activityWidget)
        {
            Widget widget = Widget.asWidgetOrNull(activityWidget);
            mainView.setWidgetVisible(bottomOfPage, widget != null);
            bottomOfPage.setWidget(widget);
        }
    };

    public void onModuleLoad()
    {
        ClientFactory clientFactory = GWT.create(ClientFactory.class);
        mainView = uiBinder.createAndBindUi(this);
        EventBus eventBus = clientFactory.getEventBus();

        ActivityMapper aaaActivityMapper = new AAAActivityMapper(clientFactory);
        ActivityManager aaaActivityManager = new ActivityManager(aaaActivityMapper, eventBus);
        aaaActivityManager.setDisplay(top);

        ActivityMapper bbbActivityMapper = new BBBActivityMapper(clientFactory);
        ActivityManager bbbActivityManager = new ActivityManager(bbbActivityMapper, eventBus);
        bbbActivityManager.setDisplay(mid);

        ActivityMapper cccActivityMapper = new CCCActivityMapper(clientFactory);
        ActivityManager cccActivityManager = new ActivityManager(cccActivityMapper, eventBus);
        cccActivityManager.setDisplay(bot);

        AppPlaceHistoryMapper historyMapper = GWT.create(AppPlaceHistoryMapper.class);

        PlaceController placeController = clientFactory.getPlaceController();
        PlaceHistoryHandler historyHandler = new PlaceHistoryHandler(historyMapper);
        historyHandler.register(placeController, eventBus, new AAAPlace());

        RootLayoutPanel.get().add(mainView);
        historyHandler.handleCurrentHistory();
    }
}

/src/aaa/bbb/ccc/client/AppEntryPoint.ui.xml

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
    xmlns:g='urn:import:com.google.gwt.user.client.ui' xmlns:h='urn:import:aaa.bbb.ccc.client'>
    <ui:style src="app.css" />
    <g:LayoutPanel width="800" height='600'>
        <g:layer left='10%' right='10%' top='4px' height='10em'>
            <g:SimplePanel ui:field="topOfPage"/>
        </g:layer>
        <g:layer left='10%' right='10%' top='204px' height='10em'>
            <g:SimplePanel ui:field="middleOfPage"/>
        </g:layer>
        <g:layer left='10%' right='10%' top='404px' height='10em'>
            <g:SimplePanel ui:field="bottomOfPage"/>
        </g:layer>
    </g:LayoutPanel>
</ui:UiBinder>

/src/aaa/bbb/ccc/client/ClientFactory.java

package aaa.bbb.ccc.client;

import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.SimpleEventBus;
import com.google.gwt.place.shared.PlaceController;

public class ClientFactory
{
    public ClientFactory()
    {
    }

    private static final EventBus eventBus = new SimpleEventBus();
    private static final PlaceController placeController = new PlaceController(eventBus);
    private static final AAAView aaaView = new AAAView();
    private static final BBBView bbbView = new BBBView();
    private static final CCCView cccView = new CCCView();

    public EventBus getEventBus()
    {
        return eventBus;
    }

    public PlaceController getPlaceController()
    {
        return placeController;
    }

    public AAAView getAAAView()
    {
        return aaaView;
    }

    public BBBView getBBBView()
    {
        return bbbView;
    }

    public CCCView getCCCView()
    {
        return cccView;
    }
}

/src/aaa/bbb/ccc/client/AppPlaceHistoryMapper.java

package aaa.bbb.ccc.client;

import com.google.gwt.place.shared.PlaceHistoryMapper;
import com.google.gwt.place.shared.WithTokenizers;

@WithTokenizers({AAAPlace.Tokenizer.class, BBBPlace.Tokenizer.class })
public interface AppPlaceHistoryMapper extends PlaceHistoryMapper
{
}

/src/aaa/bbb/ccc/client/AAAView.java

package aaa.bbb.ccc.client;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;

public class AAAView extends SimplePanel implements IsWidget, AcceptsOneWidget
{
    private final HTMLPanel aaaView;
    private Presenter presenter;

    private static AAAViewUiBinder uiBinder = GWT.create(AAAViewUiBinder.class);   
    interface AAAViewUiBinder extends UiBinder<HTMLPanel, AAAView>
    {
    }

    public AAAView()
    {
        aaaView = uiBinder.createAndBindUi(this);
    }

    @UiField
    Label aaaViewLabel;

    @UiField
    Button bbbButton;

    @UiHandler("bbbButton")
    void onBBBButtonClicked(ClickEvent event)
    {
        presenter.gotoBBBPlace();
    }

    @UiField
    Button cccButton;

    @UiHandler("cccButton")
    void onCCCButtonClicked(ClickEvent event)
    {
        presenter.gotoCCCPlace();
    }

    public void setName(String name)
    {
        aaaViewLabel.setText(name);
    }

    public void setPresenter(Presenter presenter)
    {
        this.presenter = presenter;
    }    
    public interface Presenter
    {
        void gotoBBBPlace();
        void gotoCCCPlace();
    }

    @Override
    public Widget asWidget()
    {
        return aaaView;
    }
}

/src/aaa/bbb/ccc/client/AAAView.ui.xml

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
    xmlns:g="urn:import:com.google.gwt.user.client.ui">
    <ui:style src="app.css" />
    <g:HTMLPanel  ui:field="aaaView" styleName='{style.aaaView}'>
        <g:Label  ui:field="aaaViewLabel" text="AAAView" styleName='{style.viewLabel}'></g:Label>
        <g:Button ui:field="bbbButton" text="go to bbbView"></g:Button>
        <g:Button ui:field="cccButton" text="go to cccView"></g:Button>
    </g:HTMLPanel>
</ui:UiBinder>

/src/aaa/bbb/ccc/client/AAAActivity.java

package aaa.bbb.ccc.client;

import com.google.gwt.activity.shared.AbstractActivity;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.place.shared.PlaceController;
import com.google.gwt.user.client.ui.AcceptsOneWidget;

public class AAAActivity extends AbstractActivity implements AAAView.Presenter
{
    private String name = "...the AAAView...";    
    private final AAAView aaaView;
    private final PlaceController placeController;

    public AAAActivity(ClientFactory clientFactory)
    {
        aaaView = clientFactory.getAAAView();
        placeController = clientFactory.getPlaceController();
    }

    @Override
    public void start(AcceptsOneWidget panel, EventBus eventBus)
    {
        aaaView.setPresenter(this);
        aaaView.setName(name);
        panel.setWidget(aaaView.asWidget());
    }    

    @Override
    public void gotoBBBPlace()
    {
        placeController.goTo(new BBBPlace());
    }

    @Override
    public void gotoCCCPlace()
    {
        placeController.goTo(new CCCPlace());
    }    
}

/src/aaa/bbb/ccc/client/AAAActivityMapper.java

package aaa.bbb.ccc.client;

import com.google.gwt.activity.shared.Activity;
import com.google.gwt.activity.shared.ActivityMapper;
import com.google.gwt.place.shared.Place;

public class AAAActivityMapper implements ActivityMapper
{
    private ClientFactory clientFactory;

    public AAAActivityMapper(ClientFactory clientFactory)
    {
        this.clientFactory = clientFactory;
    }

    @Override
    public Activity getActivity(Place place)
    {

        if (place instanceof BBBPlace)
        {
            return new BBBActivity(clientFactory);//return bbbActivityMapper.getActivity(place);
        }
        else
        if (place instanceof CCCPlace)
        {
            return new CCCActivity(clientFactory);//return cccActivityMapper.getActivity(place);
        }

        return null;
    }
}

/src/aaa/bbb/ccc/client/AAAPlace.java

package aaa.bbb.ccc.client;

import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceTokenizer;
import com.google.gwt.place.shared.Prefix;

public class AAAPlace extends Place
{
    private String aaaName = "AAAPlace";

    public AAAPlace()
    {
    }

    public String getAAAName()
    {
        return aaaName;
    }

    @Prefix("AAAPlace")
    public static class Tokenizer implements PlaceTokenizer<AAAPlace>
    {
        @Override
        public String getToken(AAAPlace place)
        {
            return place.getAAAName(); //"AAAName"; //place.getAAAName();
        }

        @Override
        public AAAPlace getPlace(String token)
        {
            return new AAAPlace();
        }
    }
}

/src/aaa/bbb/ccc/client/BBBView.java

package aaa.bbb.ccc.client;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;

public class BBBView extends SimplePanel implements IsWidget, AcceptsOneWidget
{
    private final HTMLPanel bbbView;
    private Presenter presenter;

    private static BBBViewUiBinder uiBinder = GWT.create(BBBViewUiBinder.class);    
    interface BBBViewUiBinder extends UiBinder<HTMLPanel, BBBView>
    {
    }

    public BBBView()
    {
        bbbView = uiBinder.createAndBindUi(this);
    }

    @UiField
    Label bbbViewLabel;

    @UiField
    Button aaaButton; 

    @UiHandler("aaaButton")
    void onAAAButtonClicked(ClickEvent event)
    {
        presenter.gotoAAAPlace();
    }

    @UiField
    Button cccButton; 

    @UiHandler("cccButton")
    void onCCCButtonClicked(ClickEvent event)
    {
        presenter.gotoCCCPlace();
    }

    public void setName(String name)
    {
        bbbViewLabel.setText(name);
    }

    public void setPresenter(Presenter presenter)
    {
        this.presenter = presenter;
    }    
    public interface Presenter
    {
        void gotoAAAPlace();
        void gotoCCCPlace();
    }

    @Override
    public Widget asWidget()
    {
        return bbbView;
    }
}

/src/aaa/bbb/ccc/client/BBBView.ui.xml

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
    xmlns:g="urn:import:com.google.gwt.user.client.ui">
    <ui:style src="app.css" />
    <g:HTMLPanel  ui:field="bbbView" styleName='{style.bbbView}'>
        <g:Label  ui:field="bbbViewLabel" text="BBBView" styleName='{style.viewLabel}'></g:Label>
        <g:Button ui:field="aaaButton" text="go to aaaView"></g:Button>
        <g:Button ui:field="cccButton" text="go to cccView"></g:Button>
    </g:HTMLPanel>
</ui:UiBinder> 

/src/aaa/bbb/ccc/client/BBBActivity.java

package aaa.bbb.ccc.client;

import com.google.gwt.activity.shared.AbstractActivity;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.place.shared.PlaceController;
import com.google.gwt.user.client.ui.AcceptsOneWidget;

public class BBBActivity extends AbstractActivity implements BBBView.Presenter
{
    private String name = "...the BBBView...";    
    private final BBBView bbbView;
    private final PlaceController placeController;

    public BBBActivity(ClientFactory clientFactory)
    {
        bbbView = clientFactory.getBBBView();
        placeController = clientFactory.getPlaceController();
    }

    @Override
    public void start(AcceptsOneWidget panel, EventBus eventBus)
    {
        bbbView.setPresenter(this);
        bbbView.setName(name);
        panel.setWidget(bbbView.asWidget());
    }    

    @Override
    public void gotoAAAPlace()
    {
        placeController.goTo(new AAAPlace());
    }

    @Override
    public void gotoCCCPlace()
    {
        placeController.goTo(new CCCPlace());
    }
}

/src/aaa/bbb/ccc/client/BBBActivityMapper.java

package aaa.bbb.ccc.client;

import com.google.gwt.activity.shared.Activity;
import com.google.gwt.activity.shared.ActivityMapper;
import com.google.gwt.place.shared.Place;

public class BBBActivityMapper implements ActivityMapper
{
    private ClientFactory clientFactory;

    public BBBActivityMapper(ClientFactory clientFactory)
    {
        this.clientFactory = clientFactory;
    }

    @Override
    public Activity getActivity(Place place)
    {
        if (place instanceof AAAPlace)
        {
            return new AAAActivity(clientFactory);//aaaActivityMapper.getActivity(place);
        }
        else
        if (place instanceof CCCPlace)
        {
            return new CCCActivity(clientFactory);//return cccActivityMapper.getActivity(place);
        }

        return null;
    }
}

/src/aaa/bbb/ccc/client/BBBPlace.java

package aaa.bbb.ccc.client;

import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceTokenizer;
import com.google.gwt.place.shared.Prefix;

public class BBBPlace extends Place
{
    private String bbbName = "BBBPlace";

    public BBBPlace()
    {
    }

    public String getBBBName()
    {
        return bbbName;
    }

    @Prefix("BBBPlace")
    public static class Tokenizer implements PlaceTokenizer<BBBPlace>
    {
        @Override
        public String getToken(BBBPlace place)
        {
            return place.getBBBName(); //"BBBName"; //place.getBBBName();
        }

        @Override
        public BBBPlace getPlace(String token)
        {
            return new BBBPlace();
        }
    }
}

/src/aaa/bbb/ccc/client/CCCView.java

package aaa.bbb.ccc.client;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;

public class CCCView extends SimplePanel implements IsWidget, AcceptsOneWidget
{
    private final HTMLPanel cccView;
    private Presenter presenter;

    private static CCCViewUiBinder uiBinder = GWT.create(CCCViewUiBinder.class);   
    interface CCCViewUiBinder extends UiBinder<HTMLPanel, CCCView>
    {
    }

    public CCCView()
    {
        cccView = uiBinder.createAndBindUi(this);
    }

    @UiField
    Label cccViewLabel;

    @UiField
    Button aaaButton;

    @UiHandler("aaaButton")
    void onAAAButtonClicked(ClickEvent event)
    {
        presenter.gotoAAAPlace();
    }

    @UiField
    Button bbbButton;

    @UiHandler("bbbButton")
    void onBBBButtonClicked(ClickEvent event)
    {
        presenter.gotoBBBPlace();
    }

    public void setName(String name)
    {
        cccViewLabel.setText(name);
    }

    public void setPresenter(Presenter presenter)
    {
        this.presenter = presenter;
    }    
    public interface Presenter
    {
        void gotoAAAPlace();
        void gotoBBBPlace();
    }

    @Override
    public Widget asWidget()
    {
        return cccView;
    }
}

/src/aaa/bbb/ccc/client/BBBView.ui.xml

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
    xmlns:g="urn:import:com.google.gwt.user.client.ui">
    <ui:style src="app.css" />
    <g:HTMLPanel  ui:field="cccView" styleName='{style.cccView}'>
        <g:Label  ui:field="cccViewLabel" text="CCCView" styleName='{style.viewLabel}'></g:Label>
        <g:Button ui:field="aaaButton" text="go to aaaView"></g:Button>
        <g:Button ui:field="bbbButton" text="go to bbbView"></g:Button>
    </g:HTMLPanel>
</ui:UiBinder>

/src/aaa/bbb/ccc/client/CCCActivity.java

package aaa.bbb.ccc.client;

import com.google.gwt.activity.shared.AbstractActivity;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.place.shared.PlaceController;
import com.google.gwt.user.client.ui.AcceptsOneWidget;

public class CCCActivity extends AbstractActivity implements CCCView.Presenter
{
    private String name = "...the CCCView...";    
    private final CCCView cccView;
    private final PlaceController placeController;

    public CCCActivity(ClientFactory clientFactory)
    {
        cccView = clientFactory.getCCCView();
        placeController = clientFactory.getPlaceController();
    }

    @Override
    public void start(AcceptsOneWidget panel, EventBus eventBus)
    {
        cccView.setPresenter(this);
        cccView.setName(name);
        panel.setWidget(cccView.asWidget());
    }    

    @Override
    public void gotoAAAPlace()
    {
        placeController.goTo(new AAAPlace());
    }

    @Override
    public void gotoBBBPlace()
    {
        placeController.goTo(new BBBPlace());
    }    
}

/src/aaa/bbb/ccc/client/CCCActivityMapper.java

package aaa.bbb.ccc.client;

import com.google.gwt.activity.shared.Activity;
import com.google.gwt.activity.shared.ActivityMapper;
import com.google.gwt.place.shared.Place;

public class CCCActivityMapper implements ActivityMapper
{
    private ClientFactory clientFactory;

    public CCCActivityMapper(ClientFactory clientFactory)
    {
        this.clientFactory = clientFactory;
    }

    @Override
    public Activity getActivity(Place place)
    {
        if (place instanceof AAAPlace)
        {
            return new AAAActivity(clientFactory);//return aaaActivityMapper.getActivity(place);
        }
        else
        if (place instanceof BBBPlace)
        {
            return new BBBActivity(clientFactory);//return aaaActivityMapper.getActivity(place);
        }

        return null;
    }
}

/src/aaa/bbb/ccc/client/CCCPlace.java

package aaa.bbb.ccc.client;

import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceTokenizer;
import com.google.gwt.place.shared.Prefix;

public class CCCPlace extends Place
{
    private String cccName = "CCCPlace";

    public CCCPlace()
    {
    }

    public String getCCCName()
    {
        return cccName;
    }

    @Prefix("CCCPlace")
    public static class Tokenizer implements PlaceTokenizer<CCCPlace>
    {
        @Override
        public String getToken(CCCPlace place)
        {
            return place.getCCCName(); //"CCCName"; //place.getCCCName();
        }

        @Override
        public CCCPlace getPlace(String token)
        {
            return new CCCPlace();
        }
    }
}

/src/aaa/bbb/ccc/client/app.css

h1 {
    font-size: 2em;
    font-weight: bold;
    color: #777777;
    margin: 40px 0px 70px;
    text-align: center;
}

.aaaView {
    border-color: black;
    border-width: 2 px;
    background-color: navy;
    width: 75%;
    height: 25%;
}

.viewLabel {
    color:white;
    font-size: 24px; 
    font-style: italic;
    font-weight: bolder; 
    border-width: 2 px;
}

.bbbView {
    border-color: black;
    border-width: 2 px;
    background-color: blue;
    width: 75%;
    height: 25%;
}

.cccView {
    border-color: black;
    border-width: 2 px;
    background-color: lightblue;
    width: 75%;
    height: 25%;
}


.layer1 {
    border-color: red;
    border-width: 2 px;
    background-color: yellow;
    width: 100%;
    height: 33%;
}

.layer2 {
    border-color: teal;
    border-width: 2 px;
    background-color: green;
    width: 100%;
    height: 33%;
}

.layer3 {
    border-color: grey;
    border-width: 2 px;
    background-color: aqua;
    width: 100%;
    height: 33%;
}

.gwt-layer {
    border-color: grey;
    border-width: 2 px;
    background-color: aqua;
    width: 100%;
    height: 33%;    
}

/war/app.html

<!doctype html>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>app</title>
    <script type="text/javascript" language="javascript" src="app/app.nocache.js"></script>
  </head>
  <body>
    <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
    <noscript>
      <div style="width: 22em; position: absolute; left: 50%; margin-left: -11em; color: red; background-color: white; border: 1px solid red; padding: 4px; font-family: sans-serif">
        Your web browser must have JavaScript enabled
        in order for this application to display correctly.
      </div>
    </noscript>
  </body>
</html>

/war/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>app</display-name>
  <welcome-file-list>
    <welcome-file>app.html</welcome-file>
  </welcome-file-list>
</web-app>

1 ответ

Решение

Проблема в вашем ActivityMappers.

Когда вы идете в AAAPlace (это место по умолчанию, поэтому оно используется, когда у вас нет маркера истории в URL):

  • AAAActivityMapper возвращается null который (учитывая aaaActivityManager) скроет topOfPage площадь
  • BBBActivityMapper возвращает AAAActivity, который будет отображать (синглтон) AAAView в middleOfPage площадь
  • CCCActivityMapper возвращает другой AAAActivity, который будет отображать (синглтон) AAAView в bottomOfPage Площадь, потому что AAAView Это виджет, он может быть показан только в одном месте одновременно. И потому что это синглтон, последний setWidget победит (удалит виджет от предыдущего родителя, прежде чем добавить его к новому). Потому что вы инициализировали cccActivityManager после bbbActivityManagerи обработчики событий вызываются в порядке регистрации, bot победит. Это оставляет вас со скрытым topOfPage, пустой middleOfPage (не скрытый, потому что mid был вызван с непустым значением, но только после этого bot вызывается с тем же виджетом, и, следовательно, крадет его из middleOfPage положить его в bottomOfPage) и AAAView в bottomOfPage,

Бесстыдный плагин: посмотрите на http://blog.ltgt.net/gwt-21-activities/ (и братские статьи о местах и ​​мероприятиях). Надеюсь, это поможет вам понять, как все это работает.

Другие вопросы по тегам