可以在运行时禁用GWT EntryPoint吗?

时间:2013-02-26 13:42:28

标签: gwt entry-point

在我的GWT 2.5应用程序中,我有两个入口点。 EntryPoint A是主应用程序,EntryPoint B提供了我的应用程序的小部件版本。

根据我提供给容器的启动参数,我想启用/禁用EntryPoint B.我怎样才能实现?我知道如何通过从我的* .gwt.xml文件中删除对应声明来在编译期间完全禁用EntryPoint。

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

似乎你可以创建两个模块,每个模块提供一个不同的入口点。两者都将继承公共逻辑模块。然后每个都有一个不同的boostrap JavaScript URL(.nocache.js)。缺点是那些脚本与浏览器完全不同,因此如果在小部件和完整版本之间切换,则没有缓存优势。

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

答案 2 :(得分:0)

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>

请参阅:http://code.google.com/p/google-web-toolkit/wiki/ConditionalProperties

答案 3 :(得分:0)

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

  • / entryA
  • / entryB

还有两个文件:

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

这些将包含来自 Application.gwt.xml

的常见内容