Мне нужно создать приложение GWT, которое будет вызываться внешним приложением с определенными параметрами URL.
Например:
http://www.somehost.com/com.app.client.Order.html?orderId=99999.
Как захватить параметр orderId внутри приложения GWT?
Мне нужно создать приложение GWT, которое будет вызываться внешним приложением с определенными параметрами URL.
Например:
http://www.somehost.com/com.app.client.Order.html?orderId=99999.
Как захватить параметр orderId внутри приложения GWT?
Попробуйте,
String value = com.google.gwt.user.client.Window.Location.getParameter("orderId");
// parse the value to int
P.S. GWT может ссылаться на собственный javascript, что означает, что если javascript может это сделать, GWT тоже может это сделать; например в GWT вы можете написать
public static native void alert(String msg)
/*-{
$wnd.alert("Hey I am javascript");
}-*/;
В этом случае вы можете даже использовать существующую библиотеку javascript для извлечения значения параметра в запросе.
У 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();
Я предлагаю вам использовать GWT MVP. Предположим, что ваш URL как
И в вашем 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();
}
}
}
Для этого вы можете использовать Activities
и Places
. Когда вы создаете Место для своей страницы, вы можете установить orderId как член. Этот член может использоваться послесловия при создании Activity
, связанного с местом (в ActivityMapper).
Единственное ограничение состоит в том, что вы не можете отправить orderId как обычный параметр. Вам нужно будет использовать URL-адрес с этой формой:
127.0.0.1:60206/XUI.html?#TestPlace:orderId=1