GWT SuperDevMode RPC主机

时间:2014-05-22 11:03:51

标签: gwt gwt-super-dev-mode

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

1 个答案:

答案 0 :(得分: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计算,并且相应的系统属性在Eclipse运行配置中设置为localhost:9876/