2009-02-26 20 views
53

Belirli bir URL parametresi olan harici bir uygulama tarafından çağrılacak bir GWT uygulaması oluşturmam gerekiyor. ÖrneğinGWT: GET isteğinde URL parametrelerinin yakalanması

:

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

GWT uygulamasında orderId parametresini nasıl yakalarım?

+0

, nasıl Gwt gelmez uygulama parametresi gibi orderID = 99999 réponds? Yani böyle bir parametreyi nasıl ele alıyor? – xybrek

+0

@xybrek Sağlanan [Tarih mekanizması] 'nı (http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsHistory.html) GWT'de dikkate almıyorsanız (sayfa yeniden yüklemeyi önlemek için # değerini kullanır) Ana giriş noktanızın 'onLoad()' yönteminde çağrılan bir yöntem yerleştirmeniz gerekir.Sayfa her çağrıldığında, verilen parametreleri inceleyip işleyebileceğiniz özel yönteminizi çağırır. – Dennis

cevap

83

deneyin

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

Not; GWT, yerel javascript'i çağırabilir, bu durumda eğer javascript malzemeleri yapabilirse, GWT bunu yapabilir; Örneğin. GWT, bu durumda

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

yazabilir, hatta sorgu dizesi içinde param değerini ayıklamak için mevcut javascript lib kullanabilirsiniz. Tüm params almak için

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

:

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

URL'lerin şeklinde olduğundan emin olun:

+1

@codemeit, bunu gwt koduna yerleştirmek için nereye? Ana giriş noktasında? Örneğin, başka bir web uygulaması tarafından çağrılacak http://mygwtapp.com/process.html?query=123 veya yalnızca tarayıcı çubuğunda yazılmış elim var. – xybrek

+0

** S ** tring olmalı, değil mi? –

19

GWT URL'den params'ı almak için bir tesis var Bir haritada aşağıdakileri kullanın:

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

Bu yöntem 'Window.Location.getParameter (" param ")' her yerde yerleştirilebileceğinden GWT uygulamasında en iyi sonucu verir. – hyip

0

GWT MVP kullanın.

deneyin

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

Diğer bir seçenek

olarak, ayrıca kullanabileceğiniz - Url'nizde

olarak

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

olduğunu Ve AppController.java içinde varsayalım Spring MVC. İşte

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

Sen Activities ve Places bunu kullanabiliriz ... bir örnektir. Sayfanız için Yer oluşturduğunuzda, orderId öğesini üye olarak ayarlayabilirsiniz. Bu üye, yer ile ilişkili Activity (ActivityMapper) oluşturduğunuzda, afterwords kullanılabilir.

Tek kısıtlama, orderId öğesini normal bir parametre olarak gönderememenizdir. Bu form ile bir url kullanmak zorunda olacak:

127.0.0.1:60206/XUI.html?#TestPlace:orderId=1 
Ben benzer bir sorun üzerinde çalışıyorum