2009-02-26 6 views
53

Je dois créer une application GWT qui sera appelée par une application externe avec des paramètres d'URL spécifiques.GWT: Capture des paramètres d'URL dans la requête GET

Par exemple:

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

Comment capturer le paramètre orderId dans l'application GWT?

+0

Je travaille sur un problème similaire, comment gwt app répond au paramètre, orderID = 99999? Je veux dire comment gère-t-il un tel paramètre? – xybrek

+0

@xybrek Si vous ne tenez pas compte du [Mécanisme de l'historique] (http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsHistory.html) fourni dans GWT (qui utilise le # pour éviter le rechargement de la page), vous devrez besoin de placer une méthode dans votre point d'entrée principal qui est appelée dans la méthode 'onLoad()' du point d'entrée principal.Chaque fois que la page est appelée, elle appelle votre méthode dédiée dans laquelle vous pouvez inspecter et traiter les paramètres donnés. – Dennis

Répondre

83

Essayez,

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

post-scriptum GWT peut invoquer le javascript natif, ce qui signifie que si javascript peut faire les choses, GWT peut le faire aussi; par exemple. GWT, vous pouvez écrire

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

Dans ce cas, vous pouvez même utiliser javascript lib existant pour extraire la valeur de la querystring param.

+1

@codemeit, où mettre cela dans le code gwt? Dans le point d'entrée principal? Par exemple, j'ai http://mygwtapp.com/process.html?query=123 qui sera appelé par une autre application web, ou simplement écrit à la main dans la barre de navigateur. – xybrek

+0

devrait être ** S ** tring, non? –

19

GWT dispose d'une facilité pour obtenir params de l'URL:

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

Assurez-vous que vos URL sont sous la forme de:

http://app.com/?param=value#place au lieu de http://app.com/#place&param=value

Afin d'obtenir tous les params dans une carte, utiliser:

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

Cette méthode 'Window.Location.getParameter (" param ")' fonctionne mieux pour mon application GWT car elle peut être placée partout. – hyip

0

Je vous suggère y ou pour utiliser GWT MVP. Supposons que votre URL comme

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

Et dans votre AppController.java -

Essayez comme

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

Une autre option, vous pouvez également utiliser Spring MVC. Voici un exemple ...

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

Vous pouvez utiliser le Activities et Places pour le faire. Lorsque vous créez le lieu pour votre page, vous pouvez définir le orderId en tant que membre. Ce membre peut être utilisé après-mots lorsque vous créez le Activity associé à l'endroit (dans ActivityMapper). La seule restriction est que vous ne pouvez pas envoyer orderId en tant que paramètre normal.

Vous devrez utiliser une URL avec ce formulaire:

127.0.0.1:60206/XUI.html?#TestPlace:orderId=1 
Questions connexes