为什么GWT URL在事件或服务调用中不会更改?

时间:2011-08-17 05:09:09

标签: gwt gwt-rpc

我有两个问题:

问:1

我目前正在开发一款GWT应用。该应用程序的入口点是:ImageViewer.java。我可以通过http://127.0.0.1:8888/ImageViewer.html?gwt.codesvr=127.0.0.1:9997访问它。我有一个名为“Search”的服务,它具有相应的“Async”和“Impl”定义。现在,我使用RPC从客户端调用服务。我可以调用该服务,获取返回值。一切正常。

但是,我希望该应用程序能够显示URL的行为更改。即,当访问服务时,我认为它会反映在浏览器的URL上,如:http://127.0.0.1:8888/search?gwt.codesvr=127.0.0.1:9997,因为我修改了web.xml。但是,这种行为没有实现。这个没有反映的任何特殊原因??

问:2

这与前一个问题相反。即我正在运行一个应用程序。假设它有一个入口点类(Imageviewer.java)和另一个复合类(searchClass.java),它将根据事件加载到Imageviewer上。此searchClass调用上一个问题中提到的“搜索”服务。

我可以在“Imageviewer”中加载“searchClass”,调用服务,服务也会返回所需的值。一切正常......但是,

我需要这样的东西:输入这个查询字符串:

http://127.0.0.1:8888/search?value=John

我希望将“searchClass”加载到“ImageViewer”上,使用值(在本例中为“john”)调用服务并显示结果。这有可能吗?

我尝试了什么:我试图在服务器上创建一个httpServletClass并将其映射到URL并进行搜索。搜索返回适当的结果。但是,我希望服务器的结果显示在客户端上。请记住,我直接使用servlet来读取URL,因此没有值从客户端传递到服务器。

提前致谢。

2 个答案:

答案 0 :(得分:1)

  1. RPC(AJAX)调用是通过XHR完成的,不会更改浏览器URL。

  2. 您不能(使用您提供的网址)。 GWT应用程序通常在一个网页中运行,即URL不会更改(请参阅gmail如何更改浏览器URL栏)。你可以做的是启用GWT history support。然后您的网址为http://host/#search?value=queryu

答案 1 :(得分:1)

答:1。要更改网址,哈希部分,您需要在History类中设置新的历史记录标记。更多关于this article中的历史管理。

A:2。对于第二部分,您可以通过更改历史记录来实现它,例如“http://127.0.0.1/search#value=John”。如果#部分发生变化,历史服务将触发事件。您也可以使用带有“?”的部分,如您的示例中所示,如果您使用Window.Location,但它将导致重新加载应用程序,这将使整个想法使用GWT。