web-dev-qa-db-fra.com

GWT: capture des paramètres d'URL dans la demande GET

J'ai besoin de créer une application GWT qui sera appelée par une application externe avec des paramètres URL spécifiques.

Par exemple:

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

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

54
Otavio

Essayer,

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

P.S. GWT peut invoquer le javascript natif, ce qui signifie que si javascript peut faire le truc, GWT peut le faire aussi; par exemple. dans 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 la bibliothèque javascript existante pour extraire la valeur de param dans la chaîne de requête.

86
Ray Lu

GWT dispose d'une fonction pour obtenir les paramètres 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 paramètres dans une carte, utilisez:

Map<String, List<String>> map = Window.Location.getParameterMap();
19
supercobra

Je vous suggère d'utiliser GWT MVP . Supposons que votre URL

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 l'utiliser avec 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
Cataclysm

Vous pouvez utiliser les Activities et Places pour ce faire. Lorsque vous créez le lieu de votre page, vous pouvez définir le orderId en tant que membre. Ce membre peut être utilisé par la suite lorsque vous créez le Activity associé au lieu (dans ActivityMapper).

La seule restriction est que vous ne pouvez pas envoyer le 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
0
vlad_dd