web-dev-qa-db-ja.com

GWT:GETリクエストでURLパラメーターをキャプチャする

特定のURLパラメーターを使用して外部アプリケーションによって呼び出されるGWTアプリケーションを作成する必要があります。

例えば:

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

GWTアプリケーション内でorderIdパラメーターをキャプチャするにはどうすればよいですか?

54
Otavio

試して、

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

追伸GWTはネイティブjavascriptを呼び出すことができます。つまり、javascriptができればGWTもできます。例えばGWTでは、次のように書くことができます

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

この場合、既存のjavascript libを使用して、クエリ文字列内のparamの値を抽出することもできます。

86
Ray Lu

GWTには、URLからパラメーターを取得する機能があります。

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

URLが次の形式であることを確認してください。

http://app.com/?param=value#placehttp://app.com/#place&param=value の代わりに

マップ内のすべてのパラメーターを取得するには、次を使用します。

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

GWT MVP を使用することをお勧めします。あなたのURLを

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

そして、あなたのAppController.Java-

として試してください

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

別のオプションでは、 Spring MVC と併用することもできます。以下に例を示します...

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

これを行うには、ActivitiesPlacesを使用できます。ページのプレイスを作成するときに、orderIdをメンバーとして設定できます。このメンバーは、場所に関連付けられたActivityを作成するときに(ActivityMapperで)あとで使用できます。

唯一の制限は、orderIdを通常のパラメーターとして送信できないことです。このフォームでURLを使用する必要があります。

127.0.0.1:60206/XUI.html?#TestPlace:orderId=1
0
vlad_dd