2009-02-26 18 views
53

特定のURLパラメータを持つ外部アプリケーションによって呼び出されるGWTアプリケーションをビルドする必要があります。例えばGWT:GETリクエストでURLパラメータを取得する

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

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

+0

私は同様の問題に取り組んでいますが、どのようにorderID = 99999のようなパラメータにアプリケーションの返信をしていますか?私はそのようなパラメータをどのように扱うのか? – xybrek

+0

@xybrek提供されている[履歴の仕組み](http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsHistory.html)をGWT(ページの再読み込みを避けるために#を使用している)で考えると、メインエントリポイントの 'onLoad()'メソッドで呼び出されるメインエントリポイントにメソッドを配置する必要があります。ページが呼び出されるたびに、指定されたパラメータを検査して処理できる専用のメソッドが呼び出されます。 – Dennis

答えて

83

試してみてください、

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

P.S. GWTはネイティブのjavascriptを呼び出すことができます。これは、javascriptがそのようなことを行うことができれば、GWTもそれを行うことができます。例えばGWTで、あなたはこの場合

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

を書くことができ、あなたも、クエリ文字列でのparamの値を抽出するために、既存のjavascriptのlibを使用することができます。

+1

@codemeit、これをgwtコードに入れる場所はどこですか?メインエントリーポイントに?たとえば、他のWebアプリケーションから呼び出されるhttp://mygwtapp.com/process.html?query=123を持っているか、ブラウザバーに手書きで書かれています。 – xybrek

+0

は** S ** tring、そうでしょうか? –

19

GWTは、URLからのparamsを取得する機能を持っています

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

URLはの形であることを確認してください:すべてのparamsを取得するために、代わりにhttp://app.com/#place&param=value

http://app.com/?param=value#placeマップでは、次のように使用します。

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

このメソッド 'Window.Location.getParameter(" param ")'は、どこにでも配置できるので、私のGWTアプリケーションに最適です。 – hyip

0

ouはGWT MVPを使用します。

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

別のオプションとして

てみてください、あなたも一緒に使用することができます - は

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

そして、あなたのAppController.javaのようにあなたのURLが想定しますSpring MVC。ここでの例では、あなたがそれを行うためにActivitiesPlacesを使用することができます...

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

です。あなたのページの場所を作成するときに、orderIdをメンバーとして設定することができます。このメンバーは、その場所に関連付けられたActivityActivityMapper)を作成するときに後で使用できます。

唯一の制限は、通常のパラメータとしてorderIdを送信できないことです。

127.0.0.1:60206/XUI.html?#TestPlace:orderId=1 
関連する問題