问题简而言之:我有两个模块继承了一个公共模块(没有入口点),每个模块都有一个主机页面。无论加载哪个,它都会在页面上同时加载。 我只是想让他们分别加载和显示自己,而不是在所有页面中一起显示..
当我启动Login.html时,它启动这两个模块(它们垂直共享浏览器空间)并加载正确的入口点(Login extends Entrypoint)两次。
当我启动Main.html时,它会启动这两个模块,每个模块都带有主入口点......
我怀疑项目结构存在问题,但我们不想仅仅因为模块而将一个项目/应用程序分成几个项目。
登录
<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='Login'>
<inherits name='fqdn.Common' />
<stylesheet src='../Common.css' />
<!-- Specify the app entry point class. -->
<entry-point class='fqdn.Login' />
<module>
主要
<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='Main>
<inherits name='fqdn.Common' />
<stylesheet src='../Common.css' />
<!-- Specify the app entry point class. -->
<entry-point class='fqdn.Main' />
<module>
的login.html:
<html>
<head>
<link type="text/css" rel="stylesheet" href="css/Common.css">
<script type="text/javascript" language="javascript" src="Login/Login.nocache.js"></script>
</head>
<body>
...
</body>
</html>
main.html中:
<html>
<head>
<link type="text/css" rel="stylesheet" href="css/Common.css">
<script type="text/javascript" language="javascript" src="Main/Main.nocache.js"></script>
</head>
<body>
...
</body>
</html>
我必须承认,两个入口点共享相同的目录和许多类,但不是相同的Ginjector。 它们被命名为myproject.client.Login和myproject.client.Main。
这是GWT失败的原因吗?对于那种情况,我很高兴知道一个很好的修复或解决方法:)
更新:添加了Main.java代码段
public class Main implements EntryPoint {
private Logger logger = Logger.getLogger(Main.class.getName());
private final GinMainInjector injector = GinMainInjector.INSTANCE;
private Place defaultPlace = GWT.create(TicketPlace.class);
private SimplePanel appWidget;
private EventBus eventBus;
public void onModuleLoad() {
logger.finest("Starting Main...");
eventBus = injector.getEventBus();
MainActivityMapper activityMapper = GWT.create(MainActivityMapper.class);
activityMapper.insertInjector(injector);
PlaceController placeController = injector.getPlaceController();
createAppWidgetPanel();
startActivityManager(activityMapper, eventBus);
startHistoryHandler(placeController, eventBus);
}
private void startActivityManager(ActivityMapper activityMapper, EventBus eventBus) {
ActivityManager activityManager = new ActivityManager(activityMapper, eventBus);
activityManager.setDisplay(appWidget);
RootLayoutPanel.get().clear();
RootLayoutPanel.get().add(appWidget);
}
}
答案 0 :(得分:0)
如果您在同一屏幕上并排看到两个模块,这意味着您已将它们都添加到RootPanel中。更重要的是,这意味着您有一个VerticalPanel或类似于您的应用容器的东西 - 一个SimplePanel不会接受多个小部件,而其他面板将一个显示在另一个之上,或者一个在另一个之下。
检查Main.java和Login.java入口点中的代码。
答案 1 :(得分:0)
现在有效!
我们正在使用SuperDevMode,它混合了两个模块。 有关类似的答案,请参阅https://stackoverflow.com/a/20334018/2337633,可能会有更好的解释
我更改了代码服务器的参数,以便每个都加载模块,而不是一起加载
在:
-src SRC package.Main package.Login
现在:
-src SRC package.Main -src SRC package.Login
注意:在这两种情况下,SRC都是同一目录。我不知道为什么以及这个参数列表如何工作,但每次当我在同一页面上看到两个模块时,我启动DevModeOn并根据url编译只是当前模块,然后再次工作。
如果我获得重定向并且其他模块启动,它可能会再次被破坏。但是再一次,DevModeOn用于那个模块并重新编译它 - 工作。
这个问题(据我所知)只是使用带有错误参数的SuperDevMode的一个小问题。
另请注意,即使每个
替换整个RootLayoutPanel(html正文)也是如此RootLayoutPanel.get().clear();
RootLayoutPanel.get().add(appWidget);
问题坚持留下来。 我真的认为这只是CodeServer参数和重新编译mashup。