GoogleからJava開発者へのサプライズ!な贈り物、Google Web Toolkit[3]

JavaScript×HTMLとJavaのシームレスな開発環境を体験してみよう


リトルソフト株式会社 長尾寿宏
2006/8/26


 クライアント側 検索機能の実装

サービスメソッドの呼び出し

 さて、いよいよクライアント側にサービスメソッドの呼び出しを実装します。

 まず、非同期コールバックインターフェイス(AsyncCallback)を実装したクラスを作成し、ここにサービス呼び出しが正常に終了した場合のメソッド(onSuccess)、エラーとなった場合のメソッド(onFailure)をそれぞれ作成します。

  class ImageSearchCallback implements AsyncCallback {

    ImageSearchClient client;

    public ImageSearchCallback(ImageSearchClient imageSearch) {
      this.client = imageSearch;
    }
    
    public void onFailure(Throwable caught) {
      /* 中略 */
    }

    public void onSuccess(Object response) {
      /* 中略 */
    }
  }

 サービスメソッド呼び出しは以下のコードとなります。

  void doSearch(final boolean fetchNext) {
    /* 中略 */
    searchService.execute(this.resultSetPosition, this.
resultSetSize,(本来は1行) 
        keyword.getText(), new ImageSearchCallback(this) );
  }

 searchServiceにはすでにImageSearchServiceAsync型の代理オブジェクトが格納されており、このexecuteメソッドを実行します。

 パラメータには、検索結果の先頭位置(this.resultSetPosition)、返却結果件数(this.resultSetSize)、検索キーワード(keyword.getText())、そして非同期コールバックインターフェイス実装オブジェクト(ImageSearchCallback)を設定します。

 検索ボタンが押された際、上記のdoSearchメソッドが実行されるように以下のようなコーディングをします。

public class ImageSearchClient implements EntryPoint , 
WindowResize Listener,(本来は1行) 
ClickListener {
     :    
  public void onModuleLoad() {
     :    
    searchButton.addClickListener(this);
  }
     :    
  public void onClick(Widget sender) {
    doSearch(false);
  }
     :  


 ウィジェットへの値設定

 

サービスメソッドが正常に終了すると、ImageSearchCallbackオブジェクトのonSuccessがコールバックされます。このときのパラメータresponseは、サービスインターフェイスで定義したexecuteメソッドの戻り値です。

 これをImageSearchResultSetオブジェクトにキャストして、必要な値を取り出し、ユーザーインターフェイス上のウィジェットへセットしていきます。

 以下のコードでは、検索キーワード、検索結果の先頭位置、結果件数を編集し、ラベルに設定しています。

public void onSuccess(Object response) {
        /* 中略 */
        ImageSearchResultSet resultSet = (ImageSearchResultSet) 
response;(本来は1行)
        this.client.label2.setText(
          keyword.getText() + "で検索した結果 " + resultSet.firstResultPosition 
+ " - " +(本来は1行)
          resultSet.totalResultsReturned + "件 / 約" + resultSet.
totalResultsAvailable + "件");(本来は1行)
        /* 中略 */
  }  


3/5

 INDEX

JavaScript×HTMLとJavaのシームレスな開発環境を体験してみよう
  Page1<Webサービスから結果セットを読み出して表示させるまで/RPCインターフェイスの定義とサービスメソッドの実装/検索結果セットのクラスを作成する/サービスインターフェイスの定義>
  Page2<サーバ側 サービスメソッドの実装/非同期インターフェイスの定義>
Page3<クライアント側 検索機能の実装/ウィジェットへの値設定>
  Page4<グリッドの利用/グリッドのバグ回避/スクロールに伴う自動読み込み>
  Page5<背景色変更と内部フレーム表示/今後のバージョンアップも期待>


 Ajax関連記事


Ajaxフレームワーク「Spry」で作る「リンク集2.0」
特集:AdobeのAjaxフレームワーク「Spry」を使ってみよう アドビのAjaxフレームワーク「Spry」。さっそく簡単なリンク集のサンプルを作成しながら、その機能を探ってみよう
リッチクライアント & 帳票」フォーラム 2006/6/21

古くて新しいAjaxの真実を見極める
「Webインターフェイスの新しい手法」「画期的なWebアプリケーションの仕組み」であるとして開発者たちの人気を集めるAjaxとは何なのか、その真実を見極めてみよう
最終更新 2005/8/2


HTML5 + UX フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日 月間