GWT:在GET请求中捕获URL参数

我需要构build一个GWT应用程序,由具有特定URL参数的外部应用程序调用。

例如:

http://www.somehost.com/com.app.client.Order.html?orderId=99999 。

如何捕获GWT应用程序中的orderId参数?

尝试,

 String value = com.google.gwt.user.client.Window.Location.getParameter("orderId"); // parse the value to int 

PS的GWT可以调用原生的JavaScript,这意味着如果JavaScript可以做的东西,GWT也可以做到这一点; 例如在GWT中,你可以写

 public static native void alert(String msg) /*-{ $wnd.alert("Hey I am javascript"); }-*/; 

在这种情况下,您甚至可以使用现有的JavaScript库来提取查询string中的参数值。

GWT有一个从url获取参数的工具:

 String value = Window.Location.getParameter("param"); 

确保您的url的格式为:

http://app.com/?param=value#place而不是http://app.com/#place¶m=value

为了获得地图中的所有参数,请使用:

 Map<String, List<String>> map = Window.Location.getParameterMap(); 

我build议你使用GWT MVP 。 假设你的url为

HTTP://www.myPageName/myproject.html #orderId:99999

并在你的AppController.java

试试

  ...... public final void onValueChange(final ValueChangeEvent<String> event) { String token = event.getValue(); if (token != null) { String[] tokens = History.getToken().split(":"); final String token1 = tokens[0]; final String token2 = tokens.length > 1 ? tokens[1] : ""; if (token1.equals("orderId") && tonken2.length > 0) { Long orderId = Long.parseLong(token2); // another your operation } } } ........... 

另外一个选项,你也可以使用Spring MVC 。 这是一个例子…

 // Below is in your view.java or presenter.java Window.open(GWT.getHostPageBaseURL() + "customer/order/balance.html?&orderId=99999", "_self", "enable"); // Below code in in your serverside controller.java @Controller @RequestMapping("/customer") public class ServletController { @RequestMapping(value = "/order/balance.html", method = RequestMethod.GET) public void downloadAuctionWonExcel(@RequestParam(value = "orderId", required = true) final String orderId, final HttpServletResponse res) throws Exception { try { System.out.println("Order Id is "+orderId); // more of your service codes } catch (Exception ex) { ex.printStackTrace(); } } } 

您可以使用“ ActivitiesPlaces来执行此操作。 为页面创buildPlace时,可以将orderId设置为成员。 当您创build与该地点相关联的Activity (在ActivityMapper中 )时,可以使用该成员的后缀。

唯一的限制是您不能将orderId作为正常参数发送。 你将不得不使用这种forms的url:

 127.0.0.1:60206/XUI.html?#TestPlace:orderId=1