2009-02-26 26 views
53

Necesito construir una aplicación GWT que será llamada por una aplicación externa con parámetros URL específicos.GWT: captura de parámetros de URL en la solicitud GET

Por ejemplo:

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

¿Cómo capturo el parámetro orderId dentro de la aplicación GWT?

+0

Estoy trabajando en un problema similar, ¿cómo responde la aplicación a los parámetros como, orderID = 99999? Quiero decir, ¿cómo maneja tal parámetro? – xybrek

+0

@xybrek Si no considera el [Mecanismo de historial] proporcionado (http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsHistory.html) en GWT (que utiliza el # para evitar la recarga de la página), lo hará necesita colocar un método en su punto de entrada principal que se invoca en el método 'onLoad()' del punto de entrada principal.Cada vez que se llama a la página invocará su método dedicado en el que puede inspeccionar y procesar los parámetros dados. – Dennis

Respuesta

83

Intenta,

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

P. S. GWT puede invocar javascript nativo, lo que significa que si javascript puede hacer las cosas, GWT puede hacerlo también; p.ej. en GWT, puede escribir

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

En este caso, incluso se puede usar javascript lib existente para extraer el valor del parámetro en la cadena de consulta.

+1

@codemeit, ¿dónde poner esto en el código gwt? En el punto de entrada principal? Por ejemplo, tengo http://mygwtapp.com/process.html?query=123 que será llamado por alguna otra aplicación web, o simplemente escrito a mano en la barra del navegador. – xybrek

+0

debe ser ** S ** tring, ¿verdad? –

19

GWT tiene una facilidad para obtener params de la URL:

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

Asegúrese de que sus URLs están en la forma de:

http://app.com/?param=value#place en lugar de http://app.com/#place&param=value

el fin de obtener todos los parametros en un mapa, use:

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

Este método 'Window.Location.getParameter (" param ")' funciona mejor para mi aplicación GWT, ya que se puede colocar en todas partes. – hyip

0

Sugiero y ou para usar GWT MVP. asumir que su URL como

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

Y en su AppController.java -

Por mucho que

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

Otra opción, también se puede utilizar con Spring MVC. A continuación se muestra un ejemplo ...

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

Puede utilizar el Activities y Places de hacer eso. Cuando crea el lugar para su página, puede establecer el ID de pedido como miembro. Este miembro se puede utilizar como palabras posteriores al crear el Activity asociado con el lugar (en ActivityMapper).

La única restricción es que no puede enviar el ID de pedido como un parámetro normal. Deberá usar una url con este formulario:

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