2009-02-26 4 views
53

Мне нужно создать приложение GWT, которое будет вызываться внешним приложением с определенными параметрами URL.GWT: Захват параметров URL в запросе GET

Например:

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

Как записать параметр orderId внутри приложения GWT?

+0

Я работаю над аналогичной проблемой, как вы, gwt app, откликаетесь на параметр like, orderID = 99999? Я имею в виду, как он обрабатывает такой параметр? – xybrek

+0

@xybrek Если вы не рассматриваете предоставленный [Механизм истории] (http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsHistory.html) в GWT (который использует #, чтобы избежать перезагрузки страницы), вы будете необходимо поместить метод в вашу основную точку входа, которая вызывается в методе 'onLoad()' главной записи точки.Каждый раз, когда вызывается страница, вы вызываете свой выделенный метод, в котором вы можете проверять и обрабатывать данные параметры. – Dennis

ответ

83

Попробуйте,

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"); 
}-*/; 

В этом случае, вы можете даже использовать существующий яваскрипта LIB для извлечения значения из параметров в строке запроса.

+1

@codemeit, где положить это в код gwt? В главной точке входа? Например, у меня есть http://mygwtapp.com/process.html?query=123, который будет вызываться каким-либо другим веб-приложением или просто написан вручную в панели браузера. – xybrek

+0

должно быть ** S ** tring, правильно? –

19

GWT есть средство, чтобы получить параметры из URL:

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

Убедитесь, что ваши URL-адреса в виде:

http://app.com/?param=value#place вместо http://app.com/#place&param=value

Для того, чтобы получить все Params на карте, используйте:

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

Этот метод 'Window.Location.getParameter (« param »)' работает лучше всего для моего приложения GWT, поскольку он может быть размещен повсюду. – hyip

0

Я предлагаю y ou использовать GWT MVP. Предположим, что ваш URL, как

http://www.myPageName/myproject.html?#orderId:99999

И в вашем AppController.java -

Try, как

...... 
    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(); 
     } 
    } 
} 
0

Вы можете использовать Activities и Places, чтобы сделать это. Когда вы создаете Место для своей страницы, вы можете установить orderId как член. Этот член может использоваться послесловия при создании Activity, связанного с местом (в ActivityMapper).

Единственное ограничение состоит в том, что вы не можете отправить orderId как обычный параметр. Вам нужно будет использовать URL-адрес с такой формой:

127.0.0.1:60206/XUI.html?#TestPlace:orderId=1 
Смежные вопросы