SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Javaで軽快に使える「軽量フレームワーク」特集

Javaで軽快に使える「軽量フレームワーク」特集
~小さなライブラリ1つで動くStripes Framework(3)

第19回

Ajax通信処理の流れを整理する

 2つある<stripes:layout-component>タグの1つ目でヘッダー部分を、2つ目で実際にボディに表示されるコンテンツをそれぞれ記述してあります。ヘッダー部分では、まずjQueryのライブラリを読み込むタグを用意します。

<script type="text/javascript"
         src="${pageContext.request.contextPath}/js/jquery.js"></script>

 ${pageContext.request.contextPath}でこのWebアプリケーションのURLを取得し、それに"/js/jquery.js"を付け足してjquery.jsのURLを設定しています。Webアプリケーションがどのような場所に配置されても正しくライブラリのパスが得られるようにしておくわけです。

 続いて、<script>タグでJavaScriptのスクリプトを記述しておきます。ここでは送信ボタンをクリックすると呼び出される「invoke」関数でフォームの内容をシリアライズし、jQueryのAjax機能を利用する処理を用意しています。$.getが、その部分です。ここでform.actionのアドレスにparams(フォームの内容をシリアライズしたもの)をパラメータとして渡してAjax通信を行っています。フォームでは、beanclass="jp.codezine.HeloActionBean"としているため、HeloActionBeanに用意されているデフォルトハンドラ・メソッドで処理されるはずです。

 通信結果は、callback関数で処理されます。ここでは、$('#msg').text(result);で得られた結果をmsgというIDのタグにテキストとして表示させています。すなわち、Ajaxでアクセスする先では、表示する内容をテキストとして出力するように設計すればよいことになります。

ActionBeanクラスの作成

 では、続いてActionBeanクラスを用意しましょう。これも、前回のサンプル「HeloActionBean」を修正して利用します。次のように書き換えてください。

package jp.codezine;

import java.io.*;
import java.util.*;

import net.sourceforge.stripes.action.*;

public class HeloActionBean implements ActionBean {
  private ActionBeanContext context;
  private String result;
  private String input1;
  
  public String getResult() { return result; }
  public void setResult(String result) { this.result = result; }
  
  public String getInput1() { return input1; }
  public void setInput1(String input1) { this.input1 = input1; }

  @Override
  public ActionBeanContext getContext() {
    return this.context;
  }

  @Override
  public void setContext(ActionBeanContext context) {
    this.context = context;
  }
  
  @DefaultHandler
  public Resolution submit() {
    return new StreamingResolution("text", new StringReader("Result: " + input1));
  }

}
フォームを送信するとAjaxでサーバにアクセスし結果を表示する
フォームを送信するとAjaxでサーバにアクセスし結果を表示する

 完成したら、実際にhelo.jspにアクセスし、フォームを送信してみましょう。Ajaxを利用してサーバにアクセスし、結果を表示します。Ajaxを利用するためページ遷移もせず、その場で表示が変わるのが分かります。

StreamingResolutionとStringReader

 次の1行で、submitメソッドによるAjaxアクセス時の処理を行っています。

return new StreamingResolution("text", new StringReader("Result: " + input1));

 ここでは、StreamingResolutionインスタンスというものを作成し、returnしています。ハンドラ用のメソッドはResolutionインスタンスを返すようになっていますが、このResolutionは、ハンドラ実行後のレスポンスとなる処理をラップするためのインターフェースで、さまざまなクラスが用意されています。先のサンプルで登場したForwardResolutionはフォワードで指定URLにアクセスするためのResolutionでした。ここでのStreamingResolutionは、ストリームデータを出力するためのクラスです。

 引数にはコンテンツタイプとInputStream/Readerインスタンスを渡します。ここではStreamReaderを渡し、そのテキストを出力させています。JSPによるページなどを使わず、ActionBeanのハンドラメソッドから直接データを出力したい場合には、このようにStreamingResolutionを利用するのがよいでしょう。

次のページ
セッションの利用

この記事は参考になりましたか?

Javaで軽快に使える「軽量フレームワーク」特集連載記事一覧

もっと読む

この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5261 2010/07/16 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー