Life, Education, Death

プログラミング以外でも思ったことをつらつらと書きたい

GWTでJSONPしたいのですよ。

いつからSDKに入っているかよくわからないのですが、2.0にはもうJsonpRequestBuilderという便利なクラスが導入されていました。

http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/jsonp/client/JsonpRequestBuilder.html

 String url = "http://www.google.com/calendar/feeds/developer-calendar@google.com/public/full" +
     "?alt=json-in-script";
 JsonpRequestBuilder jsonp = new JsonpRequestBuilder();
 jsonp.requestObject(url,
     new AsyncCallback<Feed>() {
       public void onFailure(Throwable throwable) {
         Log.severe("Error: " + throwable);
       }

       public void onSuccess(Feed feed) {
         JsArray<Entry> entries = feed.getEntries();
         for (int i = 0; i < entries.length(); i++) {
           Entry entry = entries.get(i);
           Log.info(entry.getTitle() +
                    " (" + entry.getWhere() + "): " +
                    entry.getStartTime() + " -> " +
                    entry.getEndTime());
         }
       }
     });
 
This example uses these overlay types:
 class Entry extends JavaScriptObject {
   protected Entry() {}

   public final native String getTitle() /*-{
     return this.title.$t;
   }-*/;

   public final native String getWhere() /*-{
     return this.gd$where[0].valueString;
   }-*/;

   public final native String getStartTime() /*-{
     return this.gd$when ? this.gd$when[0].startTime : null;
   }-*/;

   public final native String getEndTime() /*-{
     return this.gd$when ? this.gd$when[0].endTime : null;
   }-*/;
 }

 class Feed extends JavaScriptObject {
   protected Feed() {}

   public final native JsArray<Entry> getEntries() /*-{
     return this.feed.entry;
   }-*/;
 }

基本的にはサンプルコードの通りでした。

JSONPのサーバー側の実装の仕方は公式ドキュメントにありました。-> http://code.google.com/intl/ja/webtoolkit/doc/latest/tutorial/Xsite.html

そもそもJavascriptObjectって何って?人はこちらへ


簡単に言うとGWT側からJavascriptのオブジェクトにアクセスするためのクラスです。
JSのライブラリをGWTで使いたいとなると使うことがありますが、込み入ったことをしない限りなかなか使わないクラスですね。