如何在GWT中检查代码是在服务器端还是客户端执行?

时间:2011-11-29 12:45:31

标签: java gwt

我有一个用于服务器端和客户端的类。 如何在构造函数中检查它是从客户端还是服务器类调用的?

我已经用脏方式完成了 - 只要尝试GWT.create()方法抛出异常,如果是,运行服务器端代码。但是我怎么能避免这种情况呢?

    public PrintManager() {
    try {
        factory = GWT.create(MapConfigFactory.class);   //clientsiede factory creation
    } catch (Exception ex) {
        factory = AutoBeanFactorySource.create(MapConfigFactory.class); //serverside factory creator
    }
}

2 个答案:

答案 0 :(得分:19)

当代码在客户端上作为JavaScript运行时,

com.google.gwt.core.client.GWT.isScript()返回true

当代码在服务器JVM(共享代码)上运行时,

com.google.gwt.core.client.GWT.isClient()返回false

答案 1 :(得分:2)

AutoBeanFactorySource不是共享代码,因此您无法在客户端上使用此代码。在这种情况下,您需要:

  • 使用依赖注入,以便在客户端和服务器端以不同方式提供MapConfigFactory实例
  • 使用super-source为同一个类提供两个文件:一个用于客户端,另一个用于服务器端。在{em>覆盖一个包实现与http://code.google.com/webtoolkit/doc/latest/DevGuideOrganizingProjects.html#DevGuideModuleXml的另一个部分中解释了super-source,它被GWT用于Java运行时仿真,例如,{{1} }和com.google.gwt.regexp包,用于提供可在客户端和服务器端运行的统一API。