4

我想标题说明了一切:

是否有某种标志可以让我的 GWT 应用程序检查它当前是否在超级开发模式下运行(GWT.isProdMode()可能类似于 )?

4

9 回答 9

7

正如已经提到的,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();
    

瞧!

在这里,您将找到有关延迟绑定的文档。

于 2015-11-16T21:25:28.690 回答
5

关于拥有GWT.isProdMode().

同时,如果您真的需要知道,有一个名为的延迟绑定属性superdevmode,您可以在您的<replace-with>or<generate-with>规则中使用它。

于 2014-11-13T23:13:03.453 回答
2

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

Storage stockStore = Storage.getSessionStorageIfSupported();
if (stockStore != null)
{
    boolean isSuperDevMode = stockStore.getItem("__gwtDevModeHook:" + GWT.getModuleName()) != null);
}
于 2014-11-13T20:07:06.800 回答
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

于 2015-01-07T17:48:26.220 回答
0

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

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

检查超级开发模式(与没有 SDM 的开发应用服务器相比):如果 GWT.getModuleBaseURL() 和 GWT.getModuleBaseForStaticFiles() 不同,则您处于超级开发模式。

property name="superdevmode" 解决方案对我不起作用。

于 2015-01-25T17:27:06.537 回答
0

我使用了以下方法:

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

在 GWT 2.7.0 中工作。

于 2015-10-23T11:04:25.047 回答
0

我的解决方案是:

GWT.getModuleBaseForStaticFiles().contains("9876")
于 2016-02-24T16:26:35.013 回答
0

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

boolean superdevmode = "on".equals(System.getProperty("superdevmode"));
于 2020-11-12T15:27:24.657 回答
-1

我可以建议:

public boolean isSuperDevMode()
{
    return Window.Location.getPort().equals("8888");
}
于 2015-11-16T16:41:23.907 回答