【发布时间】:2014-11-13 19:42:16
【问题描述】:
我想标题说明了一切:
是否有某种标志可以让我的 GWT 应用检查它当前是否在超级开发模式下运行(可能类似于 GWT.isProdMode())?
【问题讨论】:
我想标题说明了一切:
是否有某种标志可以让我的 GWT 应用检查它当前是否在超级开发模式下运行(可能类似于 GWT.isProdMode())?
【问题讨论】:
有一个 open issue 关于拥有像 GWT.isProdMode() 这样的公共访问器。
同时,如果您真的需要知道,可以在<replace-with> 或<generate-with> 规则中使用名为superdevmode 的延迟绑定属性。
【讨论】:
<when-property-is name="superdevmode" value="on" />,对吗?
正如已经提到的,您可以使用superdevmode 属性。
这是一个真实的例子:
创建一个包含一个方法的类,该方法告诉我们不在 SuperDevMode:
public class SuperDevModeIndicator {
public boolean isSuperDevMode() {
return false;
}
}
扩展之前的类并重写一个方法来告诉我们是在 SuperDevMode:
public class SuperDevModeIndicatorTrue extends SuperDevModeIndicator {
@Override
public boolean isSuperDevMode() {
return true;
}
}
根据 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>
通过延迟绑定实例化SuperDevModeIndicator 类:
SuperDevModeIndicator superDevModeIndicator = GWT.create(SuperDevModeIndicator.class);
用它来检查你是否处于 SuperDevMode:
superDevModeIndicator.isSuperDevMode();
瞧!
您可以在此处找到有关 Deferred binding 的文档。
【讨论】:
我可以建议:
public boolean isSuperDevMode()
{
return Window.Location.getPort().equals("8888");
}
【讨论】:
也许有一种“官方”方式,但这应该可行:
Storage stockStore = Storage.getSessionStorageIfSupported();
if (stockStore != null)
{
boolean isSuperDevMode = stockStore.getItem("__gwtDevModeHook:" + GWT.getModuleName()) != null);
}
【讨论】:
您可以使用下面实现的 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;
}
}
【讨论】:
检查开发应用服务器: GWT.getHostPageBaseURL() 返回http://127.0.0.1:8888/
服务器端:request.getRemoteHost() 应该返回相同的(虽然我没有测试过)。
检查超级开发模式(与没有 SDM 的开发应用服务器相比): 如果 GWT.getModuleBaseURL() 和 GWT.getModuleBaseForStaticFiles() 不同, 你处于超级开发模式。
property name="superdevmode" 解决方案对我不起作用。
【讨论】:
我使用了以下方法:
private static native boolean isSuperDevMode()/*-{
return typeof $wnd.__gwt_sdm !== 'undefined';
}-*/;
在 GWT 2.7.0 中工作。
【讨论】:
我的解决办法是:
GWT.getModuleBaseForStaticFiles().contains("9876")
【讨论】:
这是一个很好的解决方案。
boolean superdevmode = "on".equals(System.getProperty("superdevmode"));
【讨论】: