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