【问题标题】:SmartGWT DataSource adding QueryString to REST callSmartGWT DataSource 将 QueryString 添加到 REST 调用
【发布时间】:2016-08-27 15:11:04
【问题描述】:

所以,我有一个 Spring-MVC RESTful 后端,它支持跨域。它已经过单元测试,我可以调用我的网络服务并取回正确的 JSON。

我有一个 SmartGWT 5.1p 和 GWT 2.7.0 前端应用程序,它在 SuperDev 模式或 Classic Dev 模式下运行良好,两者都运行良好。当我这样做时,我使用的是带有 GWT 插件的旧 Firefox 24 浏览器,我可以看到我的应用程序运行良好。我的数据源与 RESTful Web 服务相关联,我可以通过我的数据源创建、检索、更新和删除记录。

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

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

我可以从 firebug 看到的是,当我打电话时,而不仅仅是打电话:

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

我明白了:

http://mydomain:8080/admin/login/user/myusername/pwd/mypassword?0{以及这之后的一大堆东西)......我假设的查询字符串。

当我点击提交按钮时,我得到一个服务器传输错误,就是这样,我没有得到更多的信息。除了 OPTIONS 和 GET 在密码后添加大量查询字符串废话之外,firebug 没有其他报告。

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

对此的任何帮助将不胜感激。多年来,我一直在处理 SmartGWT,并切换到后端开发一段时间,而不是试图让我的 SmartGWT 前端也能工作。但是,对于现在发生的事情,我有点生疏了。

谢谢!

【问题讨论】:

  • 能把你LoginDataSource的源代码加进去吗?
  • 可以添加控制器的代码和提交吗?

标签: rest tomcat gwt smartgwt


【解决方案1】:

问题不在于查询字符串,而是我在数据源中拥有的​​旧基本网址。每个数据源中都有一个方法叫做: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 客户端应用程序

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

我想我可以硬编码运行 tomcat 的机器的公共 IP 地址,然后客户端 SmartGWT 肯定会找到 RESTful Web 服务。或者,我也可以使用 Spring Env Profile 来实现这一点。但是我所做的代码更改应该可以工作,前提是两个 WARS 在同一台机器上。

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

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

【讨论】:

  • 所以,这个问题已经解决了“——你到底是怎么解决的?我的项目架构和你的一样。 12.0p LGPL 将“?isc_dataFormat=json”附加到每个 URL。我的后端 API 忽略了它。我尝试在RestDataSource.transformRequest() 中设置DSRequest.setParams(<empty Map>)。但它不会删除查询字符串。 OperationBinding.setDataProtocol(POSTMESSAGE)..| 也没有„如果有人需要澄清,请告诉我..” |我需要它!请?我已经阅读了您 2013-2017 年的 SO 帖子。你听起来好像你已经掌握了它:) 请将一个工作示例推送到 github? TIA!
  • @deduper 这里是我的 REST 数据源的链接,github.com/tjholmes66/RESTful-Phone-Book/tree/master/restful/…,我不记得更多细节了,因为这是很久以前的事了。我用于 ContactDataSource 的格式是我用于其余部分的标准 DataSource。我想最终我提取了一些通用代码并将其放入更多的基类中。希望这会有所帮助...
  • 标准数据源”是指它扩展了 RestDataSource 吗?我看到您选择抛弃 SmartGWT 的协议,只提取数据有效负载并将其传回。聪明的!我的实现符合 SmartGWT 的协议。我正在使用 Jersey vs Spring MVC。我理解你为什么采取你的方法。如果我能早点找到你的仓库,我可能也会这样做。但就像@CharlesKendrick 的answer to another one of your questions 中的链接所解释的那样:不遵循 SmartGWT 的协议,您就错过了一些引人注目的功能!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 2011-08-03
  • 1970-01-01
相关资源
最近更新 更多