是否可以在运行时禁用GWT入口点?

是否可以在运行时禁用GWT入口点?,gwt,entry-point,Gwt,Entry Point,在我的GWT2.5应用程序中,我得到了两个入口点。入口点A是主应用程序,入口点B提供我的应用程序的小部件版本 根据我提供给容器的启动参数,我想启用/禁用入口点B。如何实现这一点?我知道如何在编译时通过从我的*.gwt.xml文件中删除相应的IG声明来完全禁用入口点。在gwt.xml <define-property name="disableEntryPoint" values="true,false" /> <!-- Provide a default --> <

在我的GWT2.5应用程序中,我得到了两个入口点。入口点A是主应用程序,入口点B提供我的应用程序的小部件版本


根据我提供给容器的启动参数,我想启用/禁用入口点B。如何实现这一点?我知道如何在编译时通过从我的*.gwt.xml文件中删除相应的IG声明来完全禁用入口点。

gwt.xml

<define-property name="disableEntryPoint" values="true,false" />

<!-- Provide a default -->
<set-property name="alternateFeatures" value="false" />


<replace-with class="com.example.EntryPoint1">
  <when-type-is class="com.example.EntryPoint2" />
  <when-property-is name="disableEntryPoint" value="false" />
</replace-with>


请在您的
gwt.xml中引用此项:

<define-property name="disableEntryPoint" values="true,false" />

<!-- Provide a default -->
<set-property name="alternateFeatures" value="false" />


<replace-with class="com.example.EntryPoint1">
  <when-type-is class="com.example.EntryPoint2" />
  <when-property-is name="disableEntryPoint" value="false" />
</replace-with>


请参阅:GWT应用程序只能有一个入口点。 因此,您可以创建两个容器,比如ContainerA和ContainerB,而不是两个应用程序。在Entrypoint的onModuleLoad方法中,执行RPC调用以获取容器参数。根据你所做的参数

public void onModuleLoad()
{ 
      getRPCService.getStartUpParameter( AsyncCallBack<Parameter>
      { 
             public void onFailure()
             {
             }

             public void onSuccess(Parameter parameter)
             {
                   if( ContainerARequired( parameter ) )
                   {
                          RoolLayoutPanel.get().add( ContanerA )
                   }
                   else
                   {
                          RoolLayoutPanel.get().add( ContanerB )
                   }
             }
      });
}
模块加载()上的公共void
{ 
getRPCService.getStartUpParameter(异步回调
{ 
公共失效()
{
}
成功时的公共void(参数)
{
如果(需要(参数))
{
RoolLayoutPanel.get().add(ContanerA)
}
其他的
{
RoolLayoutPanel.get().add(ContanerB)
}
}
});
}

使用此方法,您的js大小将增加。因此,使用代码拆分和运行异步概念将大js文件拆分为小js文件。有了它,您只能将所需的js加载到浏览器中。

一个GWT应用程序只能有一个入口点。 因此,您可以创建两个容器,比如ContainerA和ContainerB,而不是两个应用程序。在Entrypoint的onModuleLoad方法中,执行RPC调用以获取容器参数。根据你所做的参数

public void onModuleLoad()
{ 
      getRPCService.getStartUpParameter( AsyncCallBack<Parameter>
      { 
             public void onFailure()
             {
             }

             public void onSuccess(Parameter parameter)
             {
                   if( ContainerARequired( parameter ) )
                   {
                          RoolLayoutPanel.get().add( ContanerA )
                   }
                   else
                   {
                          RoolLayoutPanel.get().add( ContanerB )
                   }
             }
      });
}
模块加载()上的公共void
{ 
getRPCService.getStartUpParameter(异步回调
{ 
公共失效()
{
}
成功时的公共void(参数)
{
如果(需要(参数))
{
RoolLayoutPanel.get().add(ContanerA)
}
其他的
{
RoolLayoutPanel.get().add(ContanerB)
}
}
});
}

使用此方法,您的js大小将增加。因此,使用代码拆分和运行异步概念将大js文件拆分为小js文件。有了这个功能,您只能将所需的js加载到浏览器中。

似乎可以创建两个模块,每个模块都提供不同的入口点。两者都将从公共逻辑模块继承。然后,每一个都有一个不同的boostrap JavaScript URL(即.nocache.js)。缺点是,这些脚本对于浏览器来说是完全不同的,所以若你们在小部件和完整版本之间切换,并没有缓存的好处


您还可以在入口点方法中进行简单的测试,确定是否应该执行入口点-如果不应该,只需返回。例如,您可以检查DOM、URL或其他内容中是否存在预期的容器元素。如果在一个模块中执行两个入口点,则不会有太多问题

似乎可以创建两个模块,每个模块提供不同的入口点。两者都将从公共逻辑模块继承。然后,每一个都有一个不同的boostrap JavaScript URL(即.nocache.js)。缺点是,这些脚本对于浏览器来说是完全不同的,所以若你们在小部件和完整版本之间切换,并没有缓存的好处


您还可以在入口点方法中进行简单的测试,确定是否应该执行入口点-如果不应该,只需返回。例如,您可以检查DOM、URL或其他内容中是否存在预期的容器元素。如果在一个模块中执行两个入口点,则不会有太多问题

也许,一个入口点一个应用程序更好。 因此,您将有2个模块,具有自己的上下文和访问路径:

  • /入口
  • /入口B
此外,还有两个文件:

  • EntryA.gwt.xml
  • EntryB.gwt.xml

这些将包括Application.gwt.xml中的常见内容。也许,最好一个入口点一个应用程序。 因此,您将有2个模块,具有自己的上下文和访问路径:

  • /入口
  • /入口B
此外,还有两个文件:

  • EntryA.gwt.xml
  • EntryB.gwt.xml

这些将包括Application.gwt.xml中的常见内容,您能告诉我如何将启动参数传递给容器吗?该容器是什么吗?非常简单,例如使用系统变量,我可以通过system.getProperty检索。此外,我还定义了一个GWT RPC接口,以便在需要时将这些值传输到客户端。您可以告诉我如何将启动参数传递给容器以及该容器是什么吗?非常简单,例如使用系统变量,我可以通过system.getProperty检索这些变量。此外,我还定义了一个GWT RPC接口,以便在需要时将这些值传输到客户端?还是我误解了什么?你是对的。gwt.xml是gwt编译期间使用的配置文件,用于将java转换为js。代码将根据gwt.xml*文件中提供的信息进行编译。一旦代码编译完成,您就无法更改它,因为它将转换为java脚本。您只能在编译之前做一些事情(据我所知,在运行时更改入口点类几乎是不可能的)。@Adarsha yes。它已经编译成JS了,那么为什么在运行时会有类呢?是的,我知道如何在编译时这样做,但我需要在运行时这样做。否则,我必须创建两个d