0

我正在使用 url 导航到我的 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的RPC 调用http://127.0.0.1/app/rpc

问题是当我升级到 GWT 2.8 时,我的应用程序的 RPC 调用端点现在不同且错误,具体取决于使用的 URL。例如:

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

对于上述 URL,模块始终正确加载和执行,但是 RPC 在前两种情况下失败。只有最后一个 URL 允许我的应用程序进行 RPC 调用。

可以通过将客户端服务代理转换为ServiceDefTarget并使用setServiceEntryPoint(). 如下:

ourInstance = (MyRemoteServiceAsync)GWT.create(MyRemoteService.class);
ServiceDefTarget serviceDefTarget = (ServiceDefTarget) ourInstance;
serviceDefTarget.setServiceEntryPoint("/app/rpc");

但是,请求负载仍然包含对不正确模块库的引用。在 RPC 请求上发送的 http 标头也具有不正确的值:

X-GWT-Module-Base:http://127.0.0.1/foo/bar/

有没有办法强制客户端的 RPC 机制使用正确的 RPC URL /app/rpc?或者也许是一种正确设置模块库的方法?

更新 1

在 GWT 2.7 中看到相同的行为。

此外,当部署在 WAR 中时,<module-hash>.cache.js文件不会加载,因为它也是相对于 url 请求的。这很糟糕,因为这意味着模块代码不会被缓存,因为这个 url 每次都不一样。需要在选择器中进行修复<module>.nocache.js有没有人在现实世界中使用带有 url 链接的 GWT?

4

1 回答 1

1

通过在 html 文档的元素中指定一个<meta>元素<head>,引导 nocache.js 选择器 javascript 将选择正确的模块 baseUrl。baseUrl 必须是完全指定的绝对 url,并以/.

对于我的示例,确切的元素是:

<head>
   ...
   <meta name="gwt:property" content="baseUrl=http://127.0.0.1/app/" />
   ...
</head>
于 2016-10-27T09:12:29.827 回答