我正在使用网址导航到我的GWT应用内的不同屏幕。例如:
http://127.0.0.1/home
http://127.0.0.1/info/contact-us
http://127.0.0.1/app/index.html
我有一个servlet,它提供包含GWT所需脚本元素的html(我的GWT模块名称为“app”):
<script type="text/javascript" language="javascript" src="/app/app.nocache.html">
</script>
这适用于GWT 2.6.1。在浏览器开发工具中,可以看到我RemoteService
的{{1}}发出了RPC调用
问题是当我升级到GWT 2.8 时,我的应用程序的RPC调用端点现在是不同的,这取决于使用的URL。例如:
http://127.0.0.1/app/rpc
对于上述URL,模块始终正确加载并执行,但在前两种情况下RPC失败。只有最后一个URL允许我的应用程序进行RPC调用。
可以通过将客户端服务代理强制转换为http://127.0.0.1/home -> http://127.0.0.1/rpc
http://127.0.0.1/info/contact-us -> http://127.0.0.1/info/rpc
http://127.0.0.1/app/index.html -> http://127.0.0.1/app/rpc
并使用ServiceDefTarget
来设置RPC端点。如下:
setServiceEntryPoint()
但是,请求有效内容仍包含对错误模块库的引用。在RPC请求上发送的http标头也具有不正确的值:
ourInstance = (MyRemoteServiceAsync)GWT.create(MyRemoteService.class);
ServiceDefTarget serviceDefTarget = (ServiceDefTarget) ourInstance;
serviceDefTarget.setServiceEntryPoint("/app/rpc");
有没有办法强制客户端的RPC机制使用正确的RPC URL X-GWT-Module-Base:http://127.0.0.1/foo/bar/
?或者也许是正确设置模块库的方法?
更新1
在GWT 2.7中看到相同的行为。
此外,在WAR中部署时,/app/rpc
文件不会加载,因为它也是相对于URL请求的。这非常糟糕,因为这意味着模块代码不会被缓存,因为这个URL每次都不同。需要在选择器<module-hash>.cache.js
中进行修复。 是否有人在现实世界中实际使用GWT与网址链接?
答案 0 :(得分:1)
通过在html文档的<meta>
元素中指定<head>
元素,引导程序nocache.js选择器javascript将选择正确的模块baseUrl。 baseUrl必须是完全指定的绝对URL,并以/
结尾。
对于我的例子,确切的元素是:
<head>
...
<meta name="gwt:property" content="baseUrl=http://127.0.0.1/app/" />
...
</head>