SmartGWT DataSource将QueryString添加到REST调用

时间:2016-05-02 18:46:55

标签: rest tomcat gwt smartgwt

所以,我有一个Spring-MVC RESTful后端,即跨域启用。它是经过单元测试的,我可以调用我的Web服务并获取正确的JSON。

我有一个SmartGWT 5.1p和GWT 2.7.0前端应用程序,在SuperDev模式或经典开发模式下运行良好,效果很好。当我这样做时,我使用旧的Firefox 24浏览器和GWT插件,我可以看到我的应用程序工作得很好。我的数据源与RESTful Web服务相关联,我可以通过我的DataSources创建,检索,更新和删除记录。

我可以通过Maven编译整个应用程序,并创建一个WAR就好了。我尝试将此WAR移动到tomcat服务器,并正确部署。我可以看到应用程序在tomcat中运行,日志中没有错误。

然后当我转到第一页时,应用程序正常运行且没有错误。我要做的第一件事就是在表单中添加用户名和密码,然后它应该调用LoginDataSource,该LoginDataSource绑定到LoginCOntroller或登录Web服务。

我从萤火虫身上看到的是,当我打电话时,而不仅仅是打电话:

http://mydomain:8080/admin/login/user/myusername/pwd/mypassword

我明白了:

http://mydomain:8080/admin/login/user/myusername/pwd/mypassword?0 {以及之后的全部内容)...我猜想的查询字符串。

当我点击“提交”按钮时,我收到了SERVER TRANSPORT错误,那就是它,我没有得到更多信息。除了OPTIONS和GET在密码之后添加了大量的查询字符串废话之外,没有其他任何东西可以从firebug报告。

我可以查看tomcat日志,但我根本看不到任何错误。我甚至看不到网络服务的URL调用。

对此的任何帮助将不胜感激。我多年来一直在与SmartGWT打交道,并且暂时改用后端开发,而不是我也想让我的SmartGWT前端工作。但是,对于现在发生的事情,我有点生疏。

谢谢!

1 个答案:

答案 0 :(得分:0)

问题不在于查询字符串,而是数据源中的旧基本URL。每个数据源中都有一个名为getServiceRoot

的方法

在getServiceRoot中,我使用的是硬编码的“localhost:8080”,它在客户端代码中不起作用。这意味着无论谁在浏览器中运行应用程序,“localhost”都意味着他们的机器。所以,我不得不改变getServiceRoot来执行以下操作:

protected String getServiceRoot()
{
    String baseUrl = "http://" + Window.Location.getHostName();
    return baseUrl + UrlConstants.SOME_URL_REST_ENDPOINT;
}

因为我在同一台机器上有两个WAR;      一个WAR是Spring MVC后端RESTful Web服务      另一个WAR是前端的SmartGWT客户端应用程序

这是我遇到的一个问题...我认为只是因为两者都在同一台机器上,而前端,只需调用localhost上的代码,因为它就在那里。但对浏览器来说,这可能是任何其他机器。

我想我可能只是硬编码运行tomcat的机器的公共IP地址,然后客户端SmartGWT肯定会找到RESTful Web服务。或者,我本可以使用Spring Env Profile来实现这一目标。但是,如果两个WARS都在同一台机器上,我所做的代码更改应该有效。

我只记得浏览器中的客户端代码与浏览器运行的机器相关。

所以,这是固定的。如果有人需要澄清,请告诉我。