【问题标题】:GWT modules and pages: every host page loads both modules and displays them verticallyGWT 模块和页面:每个主机页面都加载两个模块并垂直显示它们
【发布时间】:2014-04-07 14:32:10
【问题描述】:

简而言之问题:我有两个模块继承了一个公共模块(没有入口点)和一个主机页面。无论它加载哪个,它都会在页面上同时加载两者。 我只是希望它们单独加载并显示自己,而不是在所有页面中一起显示..

当我启动 Login.html 时,它会启动这两个模块(它们垂直共享浏览器空间)并加载正确的入口点(登录扩展入口点)两次。

当我启动 Main.html 时,它会以 Main 入口点启动这两个模块...

我怀疑项目结构有问题,但我们不想仅仅因为模块而将一个项目/应用程序拆分为多个项目。

登录:

 <?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 sn-ps

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);
    }
}

【问题讨论】:

  • 请您分享一些fqdn.Mainfqdn.Login 的代码,您将在其中添加顶级组件。我想知道我是否在页面上添加/显示Composite/SimplePanel
  • 我更新了它并添加了 Main.java(Main 和 Login 看起来完全一样)

标签: java gwt module entry-point


【解决方案1】:

如果您在同一个屏幕上并排看到两个模块,这意味着您已将它们都添加到您的 RootPanel。此外,这意味着您有一个 VerticalPanel 或类似于您的应用容器的东西 - SimplePanel 不会接受多个小部件,而其他面板将显示一个在另一个之上,或者一个在另一个之下。

检查 Main.java 和 Login.java 入口点中的代码。

【讨论】:

  • 我不希望它们一起显示(如果它具有误导性,请更新我的问题)。我没有 RootPanel,只有 SimplePanel 的一个新实例。
  • 你必须有这样一行代码:RootLayoutPanel.get().add(appWidget); 否则,你的 GWT 应用程序将不会在屏幕上显示任何内容。我更新了我的回复。
  • 我添加了“RootLayoutPanel.get().clear(); RootLayoutPanel.get().add(appWidget);”而不仅仅是 RootPanel。
【解决方案2】:

现在可以了!

我们使用的是 SuperDevMode,它混合了两个模块。 请参阅https://stackoverflow.com/a/20334018/2337633 以获得类似的答案和更好的解释

我更改了代码服务器的参数以加载每个模块,而不是一起加载

之前:

 -src SRC package.Main package.Login

现在:

-src SRC package.Main -src SRC package.Login

注意:在这两种情况下,SRC 是同一个目录。我不知道这个参数列表为什么以及如何工作,但是每次当我在同一页面上看到两个模块时,我都会启动 DevModeOn 并根据 url 编译 just 当前模块,然后它再次工作。

如果我得到一个重定向并且其他模块启动,它可能再次被破坏。但话又说回来,那个模块的DevModeOn并重新编译它 - 工作

这个问题(据我了解)只是使用带有错误参数的 SuperDevMode 的一个小问题..

还要注意,即使在更换整个 RootLayoutPanel(html 正文)时

RootLayoutPanel.get().clear();
RootLayoutPanel.get().add(appWidget);

问题坚持下去。 我真的认为这只是 CodeServer 参数和重新编译混搭。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 2015-10-23
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多