2009-02-26 19 views
53

Potrzebuję zbudować aplikację GWT, która będzie wywoływana przez zewnętrzną aplikację o określonych parametrach adresu URL.GWT: Przechwytywanie parametrów adresu URL w żądaniu GET

Na przykład:

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

Jak przechwycić parametr orderId w aplikacji GWT?

+0

Pracuję nad podobnym problemem, w jaki sposób zmieniasz odpowiedzi aplikacji na parametr np. OrderID = 99999? Mam na myśli, jak radzi sobie z takim parametrem? – xybrek

+0

@xybrek Jeśli nie bierzesz pod uwagę [Mechanizm historii] (http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsHistory.html) w GWT (który używa znaku #, aby uniknąć ponownego wczytywania stron), będziesz trzeba umieścić metodę w głównym punkcie wejścia, który jest wywoływany w metodzie 'onLoad()' głównego punktu wejścia.Za każdym razem, gdy wywoływana jest strona, wywoływana jest twoja dedykowana metoda, w której możesz sprawdzać i przetwarzać dane parametry. – Dennis

Odpowiedz

83

Spróbuj,

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

PS: GWT może wywoływać macierzysty javascript, co oznacza, że ​​jeśli javascript może to zrobić, GWT może to zrobić; na przykład w GWT, można napisać

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

W tym przypadku, można nawet użyć istniejącego lib javascript, aby wyodrębnić wartości param w ciągu kwerendy.

+1

@codemeit, gdzie umieścić to w kodzie gwt? W głównym punkcie wejścia? Na przykład mam http://mygwtapp.com/process.html?query=123, który będzie wywoływany przez inną aplikację internetową lub po prostu napisany ręcznie na pasku przeglądarki. – xybrek

+0

powinien być ** S ** tring, prawda? –

19

GWT ma takie udogodnienia, aby uzyskać params z adresem URL:

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

upewnić się, że adresy URL są w formie:

http://app.com/?param=value#place zamiast http://app.com/#place&param=value

W celu uzyskania wszystkich params na mapie użyj:

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

Ta metoda 'Window.Location.getParameter (" param ")' działa najlepiej dla mojej aplikacji GWT, ponieważ może być umieszczona wszędzie. – hyip

0

Proponuję y ou użyć GWT MVP. Załóżmy, że adres URL jako

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

I w AppController.java -

Spróbuj jak

...... 
    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 
     } 
    } 
} 
........... 

Inną opcją, można również skorzystać z Spring MVC. Oto przykład ...

// 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

Można użyć Activities i Places to zrobić. Po utworzeniu Miejsca dla swojej strony można ustawić identyfikator zamówienia jako członka. Tego członka można używać po utworzeniu słowa Activity powiązanego z miejscem (w ActivityMapper).

Jedynym ograniczeniem jest to, że nie można wysłać zamówienia jako normalnego parametru. Będziesz musiał użyć adresu URL w tym formularzu:

127.0.0.1:60206/XUI.html?#TestPlace:orderId=1 
Powiązane problemy