我想标题说明了一切:
是否有某种标志可以让我的 GWT 应用程序检查它当前是否在超级开发模式下运行(GWT.isProdMode()
可能类似于 )?
我想标题说明了一切:
是否有某种标志可以让我的 GWT 应用程序检查它当前是否在超级开发模式下运行(GWT.isProdMode()
可能类似于 )?
正如已经提到的,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();
瞧!
在这里,您将找到有关延迟绑定的文档。
关于拥有像GWT.isProdMode()
.
同时,如果您真的需要知道,有一个名为的延迟绑定属性superdevmode
,您可以在您的<replace-with>
or<generate-with>
规则中使用它。
也许有一种“官方”的方式,但这应该可行:
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"));
我可以建议:
public boolean isSuperDevMode()
{
return Window.Location.getPort().equals("8888");
}