1

我正在尝试通过以下方式启动 SuperDevMode。我修改了我的index.jsp页面以将可配置的前缀附加到.nocache.js文件中。生产配置包含一个空前缀,而开发配置包含类似http://localhost:9876. 然后我在 Tomcat 上启动服务器并输入localhost:8080. GWT 正常启动,但是当它尝试发送 RPC 请求时,它失败了,因为请求转到localhost:9876而不是localhost:8080. 如何自定义 RPC 应该使用哪个主机发送请求?

4

1 回答 1

1

我花了一些时间用 Eclipse 和调试器深入研究 GWT 代码,发现 GWT RPC 将结果GWT.getModuleBaseURL()@RemoteServiceRelativePath. 这是该getModuleBaseURL方法的代码:

public static native String getModuleBaseURL() /*-{
  // Check to see if DevModeRedirectHook has set an alternate value.
  // The key should match DevModeRedirectHook.js.
  var key = "__gwtDevModeHook:" + $moduleName + ":moduleBase";
  var global = $wnd || self;
  return global[key] || $moduleBase;
}-*/;

我还检查dev_mode_on.js并发现了几次出现__gwtDevModeHook,但没有一个包含moduleBase. dev_mode_on.js还将其所有钩子安装到sessionStorage, 同时读取getModuleBaseURL$wnd我使用调试器并确信$wnd= window)。

所以我使用了以下解决方案,它对我有用。我只是将以下内容添加到我的index.jsp

<c:if test="${not empty gwtScriptPrefix}">
  <script type="text/javascript">
    window["__gwtDevModeHook:MYAPP:moduleBase"] = "MYAPP/";
  </script>
</c:if>

就在之前

<script type="text/javascript"
        src="${gwtScriptPrefix}MYAPP/MYAPP.nocache.js">
</script>

其中gwtScriptPrefix属性由 计算System.getProperty,对应的系统属性设置localhost:9876/在 Eclipse 运行配置上。

于 2014-05-23T13:24:27.890 回答