从GWT应用程序中检测超级开发模式

时间:2014-11-13 19:42:17

标签: gwt gwt-super-dev-mode

我想标题说明了一切:

是否有某种标志允许我的GWT应用程序检查它当前是否在超级开发模式下运行(可能是GWT.isProdMode()的某些内容?)

9 个答案:

答案 0 :(得分:6)

如前所述,您可以使用superdevmode属性。

这是一个现实生活中的例子:

  1. 创建一个包含一个方法的类,该方法告诉我们在SuperDevMode中不是

    public class SuperDevModeIndicator {
        public boolean isSuperDevMode() {
            return false;
        }
    }
    
  2. 扩展上一个类并重写一个方法,告诉我们 在SuperDevMode中:

    public class SuperDevModeIndicatorTrue extends SuperDevModeIndicator {
        @Override
        public boolean isSuperDevMode() {
            return true;
        }
    }
    
  3. 根据superdevmode属性,只使用一个合适的类 - 使用延迟绑定 - 将其放在*.gwt.xml中:

    <!-- deferred binding for Super Dev Mode indicator -->
    <replace-with class="com.adam.project.client.SuperDevModeIndicatorTrue">
      <when-type-is class="com.adam.project.client.SuperDevModeIndicator"/>
      <when-property-is name="superdevmode" value="on" />
    </replace-with>
    
  4. 通过延迟绑定实例化SuperDevModeIndicator类:

    SuperDevModeIndicator superDevModeIndicator = GWT.create(SuperDevModeIndicator.class);
    
  5. 用它来检查你是否在SuperDevMode中:

    superDevModeIndicator.isSuperDevMode();
    
  6. 瞧!

    您可以在此找到有关Deferred binding的文档。

答案 1 :(得分:3)

有一个open issue关于拥有GWT.isProdMode()等公共访问者。

同时,如果确实需要知道,那么您可以在superdevmode<replace-with>中使用名为<generate-with>的延迟绑定属性规则。

答案 2 :(得分:2)

也许有一种“官方”方式,但这应该有效:

Storage stockStore = Storage.getSessionStorageIfSupported();
if (stockStore != null)
{
    boolean isSuperDevMode = stockStore.getItem("__gwtDevModeHook:" + GWT.getModuleName()) != null);
}

答案 3 :(得分:0)

您可以使用下面实施的 GWTHelper.isSuperDevMode()方法。

public final class GWTHelper {

    public static boolean isSuperDevMode() {
        final Storage storage = Storage.getSessionStorageIfSupported();
        if (storage == null) {
            return false;
        }
        final String devModeKey = "__gwtDevModeHook:" + GWT.getModuleName();
        return storage.getItem(devModeKey) != null;
    }

}

来源:https://gwt.googlesource.com/gwt/+/master/dev/core/src/com/google/gwt/core/linker/DevModeRedirectHook.js

答案 4 :(得分:0)

检查开发者应用服务器: GWT.getHostPageBaseURL()返回http://127.0.0.1:8888/

服务器端:request.getRemoteHost() 应该返回相同的(虽然我没有对此进行测试)。

要检查超级开发模式(vs没有SDM的开发应用服务器): 如果GWT.getModuleBaseURL()&amp; GWT.getModuleBaseForStaticFiles()不同, 你是超级开发模式。

属性名称=&#34; superdevmode&#34;解决方案对我没用。

答案 5 :(得分:0)

我使用了以下方法:

private static native boolean isSuperDevMode()/*-{ return typeof $wnd.__gwt_sdm !== 'undefined'; }-*/;

适用于GWT 2.7.0。

答案 6 :(得分:0)

我的解决方案是:

GWT.getModuleBaseForStaticFiles().contains("9876")

答案 7 :(得分:0)

这是一个很好的解决方案。

boolean superdevmode = "on".equals(System.getProperty("superdevmode"));

答案 8 :(得分:-1)

我可以建议:

loadData